gpt4 book ai didi

objective-c - 删除核心数据对象时出错 : NSManagedObjectContext cannot delete objects in other contexts

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:20:54 24 4
gpt4 key购买 nike

我在尝试从我的核心数据存储中删除对象时遇到问题。我在调用 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);
}
}

最佳答案

Core Data 不太可能对您说谎。我建议像这样在您的代码中放置一个断言:

NSAssert([delegate managedObjectContext] == [event managedObjectContext], @"Found two contexts: %@ and %@", [delegate managedObjectContext, [event managedObjectContext]);

通过带有断点的 Xcode 运行您的应用程序(因此当您遇到断言时它会中断)并设置 MallocStackLoggingNoCompact=YES。

当触发断言时,您可以像这样使用 gdb 控制台:

(gdb) info malloc [address of event's MOC]
(gdb) info malloc [address of delegate MOC]

这将打印分配堆栈跟踪并向您显示创建两个 moc 的位置。

关于objective-c - 删除核心数据对象时出错 : NSManagedObjectContext cannot delete objects in other contexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6326113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com