核心数据 MOC 保存暂停执行并且无法保存(无错误或崩溃)
Posted
技术标签:
【中文标题】核心数据 MOC 保存暂停执行并且无法保存(无错误或崩溃)【英文标题】:core data MOC save pauses execution and fails to save (w/o error or crash) 【发布时间】:2014-04-08 21:03:47 【问题描述】:我最近实现了核心数据并发和线程限制。我正在消除皱纹。
我有一个主 MOC 和一个私有 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-)exceptions 断点时,执行会无缝继续(所以我可能可以忽略这个问题,但更重要的是,我需要解决这个可能相关的问题:core data changes don't merge)
当我在断点触发时手动输入'po error'时,日志显示:
(lldb) po error
nil
【问题讨论】:
【参考方案1】:您可能遇到了内部异常之一。每当存在潜在的合并冲突时,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 中发现了另一个新的内部异常,我希望我们能够隔离导致它触发的原因。
【讨论】:
Apple 的内部异常让我在调试时发疯。 Grrrr。 谢谢。实际上,我唯一的通用断点已经是“所有 Objective-C 异常”(由于 AVPlayer 的奇怪断点,我将其设置为这种方式)。那我该怎么办? 查看问题更新。看起来还没有运气,但我感谢您的关注。 马库斯,我已经回复了所有这些。但更重要的是,我意识到我的 MOC 没有正确合并,我认为弄清楚为什么会发生这种情况是更合乎逻辑的第一步,并且可能会消除这个问题。我提出这个问题的新问题是***.com/questions/22994183/…。再次感谢以上是关于核心数据 MOC 保存暂停执行并且无法保存(无错误或崩溃)的主要内容,如果未能解决你的问题,请参考以下文章
由于验证规则上下文导致的 iOS 核心数据保存 MOC 问题