如何刷新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];
都足以强制刷新。