Jor*_*ith 7 iphone core-data objective-c ipad ios
iCloud和Core Data运行良好.除了...
在初始应用程序启动时(现有的iCloud数据存在),NSFetchedResultsControllers不会在接收到的数据通过时更新.NSFetchedResultsController委托只是不被调用.在强制退出并重新启动应用程序时,所有数据都应该存在.
核心数据代码与此处的优秀教程相同.我觉得这个代码没有错,因为我已经将它用于另一个应用程序,并且没有这个问题.
其他信息:我的托管对象上下文初始化为主队列并发.我唯一能想到的是,我可以捕获初始数据 - 在应用程序最初启动后几秒钟就会调用以下函数.但是,尽管数据通过,但现有的获取结果控制器似乎没有相应更新(但是再次创建它们会显示数据).
- (void)storesWillChange:(NSNotification *)notification {
NSManagedObjectContext *context = self.managedObjectContext;
[context performBlockAndWait:^{
NSError *error;
if ([context hasChanges]) {
BOOL success = [context save:&error];
if (!success && error) {
// perform error handling
NSLog(@"%@",[error localizedDescription]);
}
}
[context reset];
}];
}
Run Code Online (Sandbox Code Playgroud)
那么:我该怎么做才能开始查明为什么NSFetchedResultsControllers没有按原样更新?
我在这里猜一点,但想想因为你在保存后立即重置上下文,NSFetchedResultsController委托方法由于重置而没有在这上面.我的意思是委托方法旨在处理当前结果集中更改的记录选择(插入,更新或删除当前由提取的结果控制器跟踪的记录).
当您执行上下文重置时,您将所有这些都消除,因此这些委托方法不会被调用,因为它们跟踪的内容不再以它识别的形式存在.
每当我由于传入的iCloud更新而重置上下文时,我通常会确保为新重置的上下文重新创建我的获取结果控制器.
强制退出应用程序将强制在重新启动时重新创建获取的结果控制器,从而显示您希望看到的数据.
归档时间: |
|
查看次数: |
690 次 |
最近记录: |