2011-09-26 57 views
0

我想删除一个托管对象,有什么我失踪?NSManagedObject删除不起作用,仍然可以检索对象

[managedObjectContext deleteObject:managedObject]; 

NSError *error; 

if (![self.managedObjectContext save:&error]) { 
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
    return NO; 
} 

return YES; 

当我运行这段代码时,对象仍然可以被检索。

NSManagedObject *objectiveManagedObject = [managedObjectContext objectWithID:objectID]; 

return (ObjectiveManagedObject *)objectiveManagedObject; 

回答

0

如果你

[[self managedObjectContext] setPropagatesDeletesAtEndOfEvent:NO] 

第一,会发生什么?

+0

这会导致其他代码中断,这会在单元测试之间清除数据库 – TheLearner

0

我注意到您已在self.managedObjectContextmanagedObjectContext之间切换。你确定这些是相同的变量吗?避免直接访问你的ivars;使用访问器(initdealloc除外)。这避免了各种问题。

您确定managedObject的ID为objectID?它们可能是两个看似相似的对象。

+0

是的,我确定。我已经记录了多次objectID – TheLearner

0

保存鉴于以前的答案没有检查出来,我会说,最有可能的解释是,管理对象是在需要的关系的最后一个对象。因此,只有在关系另一端的对象被删除或第二个对象被添加到关系之后,它才能被删除。

您可能还想检查持久性存储未设置为只读。我不记得你试图写一个只读商店时得到的错误。

此外,您可能需要等待几秒钟才能测试该对象。节省是磁盘操作,因此相对较慢。保存实际上可能失败。

在任何情况下,您都应该从保存中捕获错误返回。