为了学习如何重构等,我将所有核心数据和 nsfetchcontroller 移至两个类,一个用于管理所有核心数据方法,一个用于处理所有获取。我遇到的问题是,除非重新启动应用程序或添加更多数据,否则最后输入的数据不可见。
我有两个 View Controller ,第一个 (A) 显示数据,第二个 (B) 用户可以输入数据。
我的核心数据类是单例 dataManager,我的获取类称为 fetchManager。在每个 viewController 的 ViewDidLoad 中我这样做:
dataManager = [XEPDataManager sharedInstance];
self.managedObjectContext = dataManager.managedObjectContext;
self.fetchManager = [[XEPResultFetchedController alloc] initWithContext:self.managedObjectContext];
然后在 A 中,我在 viewWillAppear 中执行提取并显示数据量。
1. NSLog(@"Count: %i", [[fetchManager fetch] count]);
在 B 中创建一个新实体,然后在返回 A 之前在 viewWillDisappear 中执行保存操作。
2.
if (![self.managedObjectContext save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
我正在经历这样的事情:
- 正在启动应用
- 正在查看 A
- 计数:0
- 转到B,输入数据然后返回给A。
- 计数:0(预期为 1)
- 重复步骤 4
- 计数:1(预期 2)
- 重新启动应用程序 9:数量:2 10:重复步骤4 11:数量:2
很明显数据被保存了..但不知何故不是直接保存的,我首先认为这是我在分配“本地版本”时处理上下文的问题(不确定这是否是它的工作原理)。在获取 viewDidAppear 之前,我尝试使用单例 dataManager 中的上下文更新获取管理器中的上下文,但没有成功。
有人知道它是什么吗?
最佳答案
原因是保存在上下文中是异步的。完成后,您会收到通知。正确的方法是实现 nsfetchcontroller 的委托(delegate)方法。这样,您将在发生某些事情时获得回调,并且您可以相应地更新 UI。
关于ios - 保存核心数据条目,它们不能直接用于获取,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24868761/