CoreData托管对象上下文递归保存错误

18

我的一些用户在进行保存操作时遇到了 CoreData 错误。我在网上找不到任何有关此错误或符号化堆栈跟踪的信息。

错误消息是尝试递归调用 -save: 上的上下文已中止,堆栈跟踪,完整的错误消息如下。

是否有人有任何提示或想法,如何弄清楚出了什么问题?

Error Domain=NSCocoaErrorDomain Code=132001 "(null)" UserInfo={message=attempt to recursively call -save: on the context aborted, stack trace=(
0   CoreData                            0x0000000188cbe70c  + 164
1   Primetime                           0x0000000100077ea4 Primetime + 130724
2   Primetime                           0x00000001000ae988 Primetime + 354696
3   Primetime                           0x0000000100081674 Primetime + 169588
4   Primetime                           0x00000001000802ac Primetime + 164524
5   CoreData                            0x0000000188d8bbd4  + 4568
6   CoreData                            0x0000000188d8a9ec  + 124
7   CoreFoundation                      0x00000001869ac24c  + 20
8   CoreFoundation                      0x00000001869ab950  + 400
9   CoreFoundation                      0x00000001869ab6cc  + 60
10  CoreFoundation                      0x0000000186a187bc  + 1504
11  CoreFoundation                      0x00000001868ef32c _CFXNotificationPost + 376
12  Foundation                          0x000000018738296c  + 68
13  CoreData                            0x0000000188cc16e8  + 724
14  CoreData                            0x0000000188d43ca4  + 1336
15  CoreData                            0x0000000188cbfd04  + 2116
16  CoreData                            0x0000000188cbe808  + 416
17  Primetime                           0x0000000100077ea4 Primetime + 130724
18  Primetime                           0x0000000100089968 Primetime + 203112
19  Primetime                           0x00000001001d47c0 Primetime + 1558464
20  libdispatch.dylib                   0x0000000186459058  + 24
21  libdispatch.dylib                   0x0000000186459018  + 16
22  libdispatch.dylib                   0x000000018645dbcc _dispatch_main_queue_callback_4CF + 1000
23  CoreFoundation                      0x00000001869bfc48  + 12
24  CoreFoundation                      0x00000001869bd834  + 1660
25  CoreFoundation                      0x00000001868ed764 CFRunLoopRunSpecific + 292
26  GraphicsServices                    0x00000001882f0198 GSEventRunModal + 180
27  UIKit                               0x000000018c8668d0  + 664
28  UIKit                               0x000000018c86163c UIApplicationMain + 208
29  Primetime                           0x00000001000ada1c Primetime + 350748
30  libdyld.dylib                       0x00000001864905b8  + 4

3
你有没有可能在NSManagedObjectContextDidSaveNotification被发布时从代码中调用了save:方法? - Tom Harrington
1
我并没有使用那个通知,但我正在使用NSManagedObjectContextObjectsDidChange。我刚刚查看了NSManagedObjectContextObjectsDidChange的文档,它说现在调用save是不安全的。我在我的代码中找到了一些可能会从NSManagedObjectContextObjectsDidChange触发保存的地方。我将继续深入研究,感谢您的提示。 - duncanc4
我只在iOS10 beta 4中遇到了这个问题,在iOS 9.3.3中没有发生过,并且无法找到解决方案。你的用户是否已经升级? - Grenter
我只记录了错误信息,没有记录操作系统版本,所以我不知道。这是可能的,因为只有少数用户看到了它。 - duncanc4
1个回答

26

我在Xcode8/ios10中遇到了同样的问题。这个问题是由于在下面的方法内调用保存核心数据上下文而引起的。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self methodCallingSaveContext];
}

The

methodCallingSaveContext

调用保存核心数据上下文的方法。为了打破递归调用,我以以下方式重写了该方法:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
        dispatch_async(dispatch_get_main_queue(), ^{
               [self methodCallingSaveContext];
         });
}

现在一切都恢复正常了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接