我最近实现了核心数据并发和线程限制。我正在研究皱纹。
我有一个主要的MOC和一个私人MOC,每个都是非等级链接到PSC。只要保存了它们,它们就会合并。
我遇到MOC保存失败的问题。应用程序不会崩溃,但对象不会保存并执行暂停(但可以恢复),并在问题导航器中显示以下内容:
正如您所看到的,这是在私有MOC队列中执行的,这是正确的,因为这是执行暂停的行:
如您所见,我在私有MOC队列中将保存消息发送到私有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-)异常断点时,执行会无缝继续(所以我可以忽略这个打嗝,虽然更重要的是,我需要解决这个可能相关的问题:core data changes don't merge)
当断点触发时手动输入“po error”时,日志显示:
(lldb) po error
nil
答案 0 :(得分:2)
您可能遇到其中一个内部异常。只要存在潜在的合并冲突,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中发现了另一个新的内部异常,我希望我们可以找出导致它触发的原因。