我最近实现了核心数据并发和线程限制。我正在消除皱纹。
我有一个主 MOC 和一个私有(private) MOC,每个都以非分层方式链接到 PSC。每当保存一个时,它们就会合并。
我遇到了 MOC 保存失败的问题。应用程序没有崩溃,但对象没有保存并且执行暂停(但可以恢复),问题导航器中显示以下内容:
如您所见,这是在私有(private) MOC 队列中执行的,这是正确的,因为这是执行暂停的行:
如您所见,我在私有(private) MOC 队列中将保存消息发送到私有(private) MOC。
关于如何解决此问题的任何想法?因为我没有收到错误消息,所以我真的不知道从哪里开始。谢谢!
更新
我按照 Marcus 的指示替换了我的保存/错误代码。现在是:
[[self privateManagedObjectContext] performBlockAndWait:^{
NSError *error = nil;
if (![[self privateManagedObjectContext] save:&error]) {
NSLog(@"ERROR SAVING MOC IN syncParseObjectLocally: %@\n%@", [error localizedDescription], [error userInfo]);
}
NSLog(@"%@", error);
NSLog(@"%@\n%@", [error localizedDescription], [error userInfo]);
}];
在日志中,这会产生所有 null
。
我没有使用 iCloud。
当我关闭 all-(objective-c-)exceptions 断点时,执行会无缝地继续(因此我可能会忽略这个问题,但更重要的是,我需要解决这个可能相关的问题:core data changes don't merge)
断点触发时手动输入'po error',日志显示:
(lldb) po error
nil
最佳答案
您可能遇到了内部异常之一。每当存在潜在的合并冲突时,Core Data 都会在内部抛出异常。它可能会解决合并(这就是您所看到的)但它仍然会抛出。
要对此进行测试,请将断点更改为仅在 Objective-C 异常而非 C++ 异常时中断。如果您再也看不到中断,那么这就是您所看到的。
此外,归档雷达;这个异常很烦人,如果我们有足够的票数来查看它,我会很高兴。
更新
有控制台输出吗?
error
变量有值吗?
我知道你说你没有收到错误消息,但我想验证 error
变量是 nil
与没有有效载荷。你能在那个断点做一个 po error
吗?
此外,我会尝试将该行代码更改为:
[[self privateManagedObjectContext] performBlockAndWait:^{
NSError *error = nil;
if (![[self privateManagedObjectContext] save:&error]) {
NSLog(@"ERROR SAVING MOC IN syncParseObjectLocally: %@\n%@", [error localizedDescription], [error userInfo]);
}
}];
只是为了测试队列是否真的属于this NSManagedObjectContext
。
更新
你在使用 iCloud 吗?
如果您关闭断点,应用程序是否可以正常运行?
当我提到 po error
时,我的意思是在遇到断点时执行此操作并手动输入。
我相信调用 -performBlockAndWait:
也没有任何效果。
我想知道您是否发现在 Core Data 中抛出了另一个新的内部异常,我希望我们能够找出导致它触发的原因。
关于ios - 核心数据 MOC 保存暂停执行且保存失败(无错误或崩溃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22948130/