如何刷新TableViewCells

如何刷新TableViewCells

问题描述:

我在一个更大的项目中使用Cedar框架进行单元测试。我正在为包含UITableView的视图编写单元测试。如何刷新TableViewCells

初始化:

subject = [[ControllerWithTableView alloc] initWithParams:params]; 
navigationController = [[UINavigationController alloc] initWithRootViewController:subject]; 

然后,我设置了一些事情,并呼吁:

[subject: viewWillAppear:NO]; 

在测试中我可以在indexPaths等要求细胞 这背后的主要想法是,它运行时不会让UI有太多时间设置。

在某些测试中,我不得不补充:

[subject.view layoutIfNeeded]; 

然后它的工作。

但在当前的测试中,我添加了一个新的tableViewRow,它在运行时调用了相同的方法。但我无法通过测试重新加载UITableView来创建新的行和单元格,并对其进行测试。

Here建议使用:

#define tickRunLoop (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.01, false)) 

它的工作原理。但有时它会崩溃。不只是一次测试失败,而是崩溃了运行单元测试的过程。所有其他测试都不会运行到最后。我不能推动不稳定的代码到客户的回购,所以这不是一个选项...

我正在使用XCode 8.3.3,如果这是相关的。

我还能做些什么来强制刷新?

好的,这是我的错。我有我的代码(或至少在项目中,这不是我的代码:P)

dispatch_async(dispatch_get_main_queue(), ^{ 
    // stuff 
}); 

。 因此,测试比应该测试的代码的执行更快。一定要小心异步的东西!

在所有情况下[subject.view layoutIfNeeded];都足以强制刷新。