gpt4 book ai didi

iphone - 我们如何防止 "CoreData could not fulfill a fault"?

转载 作者:行者123 更新时间:2023-12-03 18:45:07 27 4
gpt4 key购买 nike

我们偶尔会收到“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];
}

关于iphone - 我们如何防止 "CoreData could not fulfill a fault"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6969034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com