【问题标题】:NSManagedObject delete not working, can still retrieve the objectNSManagedObject 删除不起作用,仍然可以检索对象
【发布时间】:2011-09-26 14:15:10
【问题描述】:

我正在尝试删除一个托管对象,有什么我遗漏的吗?

[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; 

【问题讨论】:

    标签: iphone objective-c core-data


    【解决方案1】:

    如果你这样做会发生什么

    [[self managedObjectContext] setPropagatesDeletesAtEndOfEvent:NO]
    

    第一个?

    【讨论】:

    • 这会导致其他代码中断,从而在单元测试之间清除数据库
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      上下文未正确保存

      【讨论】:

        【解决方案4】:

        鉴于之前的答案没有检查出来,我想说最可能的解释是托管对象是所需关系中的最后一个对象。因此,在删除关系另一端的对象或将第二个对象添加到关系之前,无法删除它。

        您可能还想检查持久存储是否未设置为只读。我不记得当您尝试编写只读存储时遇到什么错误。

        此外,您可能希望在测试对象之前等待几秒钟。保存是磁盘操作,因此相对较慢。保存实际上可能失败。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-25
          • 2016-08-14
          • 1970-01-01
          相关资源
          最近更新 更多