我们如何防止"CoreData无法完成故障"?

tjg*_*184 6 iphone core-data fault

我们每隔一段时间就会得到"CoreData无法解决的错误".我们已阅读Apple文档,但不清楚允许保留的内容.我们一直非常谨慎地为每个线程创建一个上下文等.但是,我们的应用程序正在做的一件事是我们在UIViewControllers上保留NSManagedObjects(通常通过NSArray或NSDictionary).我猜测正在发生的事情是对象关系正在发生变化,我们没有处理适当的通知.

有没有人对Core Data的更好设计有任何建议?当我们得到错误时,我看不到我们实际上从上下文中删除了任何导致错误的东西.如果它们保持状态,是否有必要在我们的UIViewControllers上处理NSManagedObjectContextObjectsDidChangeNotification?任何建议,将不胜感激.

Mar*_*ski 5

您可以在Core Data中注册更改通知.这将允许您在更改托管对象时更新它们.有关详细信息,请参阅Core Data Docs.您将对2种注册和响应更改的方法感兴趣:

  [NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(mergeChanges:)
                                              name:NSManagedObjectContextDidSaveNotification
                                            object:(your NSManagedObjectContext)];
Run Code Online (Sandbox Code Playgroud)

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];  
}
Run Code Online (Sandbox Code Playgroud)