我有一个使用coredata的项目,我正在尝试从我存储的内容中删除。但我总是犯这个错误。
An NSManagedObjectContext cannot delete objects in other contexts.
我看了看苹果公司说的话,从我所能看出的我是对的,但还是有什么不对劲。有什么建议吗?Thx!
for (UserNumber *info in pinNumberArray) {
NSSet *time = [[NSSet alloc] initWithSet:info.Times];
for (ErgTimes *ergTimes in time){
NSMutableArray *temp = [[NSMutableArray alloc] initWithObjects:ergTimes.Twok, nil];
NSManagedObject *eventToDelete = [temp objectAtIndex:0];
[managedObjectContext deleteObject:eventToDelete];
}
}
好吧,可能是您的对象、上下文和线程混淆了。NSManagedObjectContext
不是线程安全的。要从上下文中删除对象,您需要先将对象"提取到"上下文中,我猜您的托管对象是由不同的MOC提取的。如果没有看到更多的代码,我就无法判断。
然而,有一个相对容易的解决方案。在你的for循环中,改为
for (ErgTimes *ergTimes in time){
NSMutableArray *temp = [[NSMutableArray alloc] initWithObjects:ergTimes.Twok, nil];
NSManagedObject *eventToDelete = [managedObjectContext objectWithID:[[temp objectAtIndex:0] objectID]];
[managedObjectContext deleteObject:eventToDelete];
}
这样做的目的是使用线程安全的objectID在MOC中获取您当前使用的对象。
您必须使用用于获取对象的NSManagedObjectContext
来删除它们。最简单的解决方案:使用与每个对象关联的managedObjectContext来删除它
for (UserNumber *info in pinNumberArray) {
NSSet *time = [[NSSet alloc] initWithSet:info.Times];
for (ErgTimes *ergTimes in time){
NSMutableArray *temp = [[NSMutableArray alloc] initWithObjects:ergTimes.Twok, nil];
NSManagedObject *eventToDelete = [temp objectAtIndex:0];
[eventToDelete.managedObjectContext deleteObject:eventToDelete];
}
}