如何防止“CoreData无法完成故障”?

2024-04-22

我们偶尔会收到“CoreData 无法完成故障”的信息。我们已阅读 Apple 文档,但不清楚允许保留哪些内容。我们非常小心地为每个线程创建一个上下文等。但是,我们的应用程序正在做的一件事是我们在 UIViewController 上保留 NSManagedObjects(通常通过 NSArray 或 NSDictionary)。我猜发生的事情是对象关系正在发生变化,而我们没有处理适当的通知。

有人对核心数据更好的设计有什么建议吗?当我们收到错误时,我看不到我们实际上从上下文中删除了任何内容来导致错误。如果 UIViewController 保留状态,是否有必要处理 NSManagedObjectContextObjectsDidChangeNotification?任何建议,将不胜感激。


您可以在 Core Data 中注册更改通知。这将允许您在托管对象发生变化时更新它们。有关更多信息,请参阅核心数据文档。您将对注册和响应更改的两种方法感兴趣:

  [NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(mergeChanges:)
                                              name:NSManagedObjectContextDidSaveNotification
                                            object:(your NSManagedObjectContext)];

mergeChanges 选择器(您的方法)将调用以下方法来同步其他线程的任何更改。它看起来像这样:

- (void)mergeChanges:(NSNotification *)notification{
  AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
  NSManagedObjectContext *context = [appDelegate managedObjectContext];

  // Merge changes into the default context on the main thread
  [context performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
                            withObject:notification
                         waitUntilDone:YES];  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止“CoreData无法完成故障”? 的相关文章

随机推荐