删除对象Coredata
我有一个使用coredata的项目,我正试图从我存储的内容中删除。但我不断收到这个错误。删除对象Coredata
An NSManagedObjectContext cannot delete objects in other contexts.
我看着苹果公司不得不说,从我可以告诉我有它正确的,但事情仍然关闭。有什么建议么?谢谢!
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];
}
这是做什么是获取目前使用其对象,它是线程安全的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];
}
}
这是我如何获取对象,你能看到这个问题吗? NSEntityDescription * entity = [NSEntityDescription entityForName:@“UserNumber”inManagedObjectContext:managedObjectContext]; NSFetchRequest * request = [[NSFetchRequest alloc] init]; [request setEntity:entity]; NSSortDescriptor * pinNumbers = [[NSSortDescriptor alloc] initWithKey:@“PIN”升序:NO]; NSArray * sortDescriptors = [NSArray arrayWithObject:pinNumbers]; [request setSortDescriptors:sortDescriptors]; NSMutableArray * mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; – 2011-06-13 23:09:13
当我尝试,我得到以下错误 - [NSCFNumber objectID]:无法识别的选择发送到实例0xaa004f0。有什么想法吗? – 2011-06-13 21:36:51
哦,我不确定你的数组是什么,假设它是一个NSManagedObject(或子类)。您需要从您的NSManagedObject获取对象ID,并将其作为参数传递给MOC,它将返回相同的受管对象,但在当前上下文中,然后可以删除它们。从你原来的问题来看,什么是ErgTimes类,它是Twok属性? – 2011-06-14 00:28:48
哦,对不起,你只需要调用[managedObjectContext deleteObject:[managedObjectContext objectWithID:[info objectID]]]; – 2011-06-14 00:32:25