我有一个Core Data应用程序,带有一个显示2个视图控制器的标签栏控制器。如果我在第一个选项卡的视图控制器中添加了一些东西,它应该显示在第二个选项卡的VC中。两个VC都基于NSFetchedResultsController,它基于同一个实体;唯一的区别是一个有谓词而第二个VC没有。
这适用于普通模板,当从第一个VC添加数据时,它会使用controllerWillChangeContent和controllerDidChangeContent在第二个选项卡中立即更新。问题是如果用户在第一个VC中添加或删除任何行,当用户进入第二个选项卡时,他们看不到动画插入或删除的行......一切都已存在。
我想在第二个标签的VC中做的是延迟调用[self.tableView endUpdates](导致动画插入/删除表中的行),直到用户实际转到该标签,那个VC的viewWillAppear。我试过这个,但似乎不起作用:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
tableviewUpdates = TRUE;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (tableviewUpdates) {
tableviewUpdates = FALSE;
[self.tableView endUpdates];
}
}
如果一次添加一行然后切换到第二个选项卡,则会有效,但如果我在第一个选项卡中添加多行然后切换,则不行。 任何帮助,将不胜感激。
答案 0 :(得分:1)
你正在违背NSFetchedResultsController的目的,即自动和轻松地更新tableview。
但我很确定,如果覆盖所有FRC委托方法,则可以阻止所有自动更新。
您可能想重新考虑此设计。用户是否真的希望看到一个视图中的更改在一秒钟内重现?他们是否理解他们正在观看之前更改的倒退,或者他们会直觉地认为应用程序正在对自己的数据做些什么吗?
标准UI语法教会用户期望一次更改动画,然后在标准显示中显示。我建议你在部署这样一个非标准接口之前,仔细测试这个设计。