mar*_*son 2 core-data objective-c ios
我在尝试从Core Data存储中删除对象时遇到问题.我打电话时收到的错误deleteOject如下:An NSManagedObjectContext cannot delete objects in other contexts.
我在网上找到了一些关于这个错误的文档,但它主要涉及在多个线程中访问ManagedObjectContext,这可能会导致问题,但我目前没有处理任何其他线程.我已经完成了我的代码,试图确保我没有创建任何其他上下文,除了我在AppDelegate中创建的上下文,并且找不到可能的罪魁祸首.
我正在测试的代码如下:
NSMutableSet *remoteNids = [NSMutableSet setWithObjects:@"140", @"141", nil];
for (GCEvent *event in nodeEventsFromStore) {
if (![remoteNids containsObject:event]) {
NSLog(@"Event no longer exists on remote. Removing object %@ from store.", event);
[[delegate managedObjectContext] deleteObject:event];
}
else {
NSLog(@"Event %@ exists on remote", event);
}
}
Run Code Online (Sandbox Code Playgroud)
Core Data对您说谎的可能性极小.我建议在你的代码中添加一个断言,如下所示:
NSAssert([delegate managedObjectContext] == [event managedObjectContext], @"Found two contexts: %@ and %@", [delegate managedObjectContext, [event managedObjectContext]);
Run Code Online (Sandbox Code Playgroud)
通过Xcode运行您的应用程序,并打开断点(因此当您点击断言时它会中断)并设置MallocStackLoggingNoCompact = YES.
触发断言时,您可以像这样使用gdb控制台:
(gdb) info malloc [address of event's MOC]
(gdb) info malloc [address of delegate MOC]
Run Code Online (Sandbox Code Playgroud)
这将打印alloc堆栈跟踪并显示您创建两个moc的位置.
| 归档时间: |
|
| 查看次数: |
2277 次 |
| 最近记录: |