核心数据MOC保存暂停执行并且无法保存(没有错误或崩溃)

时间:2014-04-08 21:03:47

标签: ios core-data

我最近实现了核心数据并发和线程限制。我正在研究皱纹。

我有一个主要的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

1 个答案:

答案 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中发现了另一个新的内部异常,我希望我们可以找出导致它触发的原因。