删除对象Coredata



我有一个使用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];
    }
}  

最新更新