Iphone 我们如何防止;CoreData无法完成一个故障“测试”;?

Iphone 我们如何防止;CoreData无法完成一个故障“测试”;?,iphone,core-data,fault,Iphone,Core Data,Fault,我们每隔一段时间就会收到“CoreData无法完成故障”。我们已经阅读了苹果的文档,但不清楚哪些内容可以保留。我们一直非常小心地为每个线程创建一个上下文,等等。然而,我们的应用程序正在做的一件事是在UIViewController上保留NSManagedObjects(通常通过NSArray或NSDictionary)。我猜发生的事情是对象关系正在改变,而我们没有处理适当的通知 有人对核心数据的更好设计有什么建议吗?当我们得到错误时,我看不出我们实际上删除了上下文中导致错误的任何内容。如果UIV

我们每隔一段时间就会收到“CoreData无法完成故障”。我们已经阅读了苹果的文档,但不清楚哪些内容可以保留。我们一直非常小心地为每个线程创建一个上下文,等等。然而,我们的应用程序正在做的一件事是在UIViewController上保留NSManagedObjects(通常通过NSArray或NSDictionary)。我猜发生的事情是对象关系正在改变,而我们没有处理适当的通知


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

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

  [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];  
}

我们有一个未发布的视图,该视图在删除NSManagedObjects后引用了它们。很难找到。