ios - 核心数据 MOC 保存暂停执行且保存失败(无错误或崩溃)

标签 ios core-data

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

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

相关文章:

ios - 如何在页脚中使用 segue 将标签数据传递到不同的部分?

objective-c - 如何在 Xcode 8 中使用 CoreData?

ios - 图像的核心数据性能问题

ios - 一对多关系 : CoreData

ios - 使用核心数据,我得到一个错误 'nib but didn’ t get a UICollectionView。

iphone - 在 iOS 中以编程方式导航

ios - AVAudioSession 类别变为 nil 并且 mediaServicesWereReset,avplayer 播放一直失败

ios - 根据 Int 查找 JSON 字典中的前 10 项

ios - 如果我在代码上添加这个函数,NSTimer 停止,为什么?

ios - 核心数据迁移示例