ios - 保存核心数据条目,它们不能直接用于获取,为什么?

标签 ios objective-c core-data nsfetchedresultscontroller

为了学习如何重构等,我将所有核心数据和 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]);
}

我正在经历这样的事情:

  1. 正在启动应用
  2. 正在查看 A
  3. 计数:0
  4. 转到B,输入数据然后返回给A。
  5. 计数:0(预期为 1)
  6. 重复步骤 4
  7. 计数:1(预期 2)
  8. 重新启动应用程序 9:数量:2 10:重复步骤4 11:数量:2

很明显数据被保存了..但不知何故不是直接保存的,我首先认为这是我在分配“本地版本”时处理上下文的问题(不确定这是否是它的工作原理)。在获取 viewDidAppear 之前,我尝试使用单例 dataManager 中的上下文更新获取管理器中的上下文,但没有成功。

有人知道它是什么吗?

最佳答案

原因是保存在上下文中是异步的。完成后,您会收到通知。正确的方法是实现 nsfetchcontroller 的委托(delegate)方法。这样,您将在发生某些事情时获得回调,并且您可以相应地更新 UI。

关于ios - 保存核心数据条目,它们不能直接用于获取,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24868761/

相关文章:

ios - 核心数据锁因为合并?

ios - reloadData()后无法重绘UICollectionViewCell

ios - Cocos2dX CCSpriteBatchNode - 无法加载 PVR 图像 Sprites.pvr.ccz

ios - 为什么 estimatedSectionHeaderHeight 领先的应用程序在我的 iPad 之一中崩溃?

ios - 在 iOS( objective-c )中单击 Button 时,如何在 UITableView 中获取特定的 JSON 数据?

ios - prepareForSegue - CollectionView/TableView

ios - 有没有办法使用 AVAudioPlayer 倒带音乐?

ios - 关闭键盘时,如何将现有文本字段保留在同一位置?

ios - AVPlayer 流媒体工作,但它不

objective-c - 强制 NSLayoutManager 绘制不同字体的字形