【问题标题】:Deleting a specific managed object from persistence store ?从持久性存储中删除特定的托管对象?
【发布时间】:2013-07-18 13:08:32
【问题描述】:

我对在 IOS 中使用 Core Data 尤其陌生,我偶然发现了一个我似乎无法解决的问题。如果已经有关于此的帖子,我会提前道歉,我已经尽我所能努力,而不会因为沮丧而破坏我的电脑。假设我有两个不同的视图控制器,视图控制器 1 和视图控制器 2。此外,视图控制器 1 有一个“下一步”按钮,可将用户带到视图控制器 2。在视图控制器 1 中,我创建了一个托管对象 A 和做一个保存,所以现在我的持久存储更新了新的托管对象A。点击下一步后,在视图控制器2的加载方法中,我想删除我在上一个视图中创建并保存的这个对象A控制器。我该怎么做?最好的方法是什么?我能想出的唯一解决方案是执行以下操作:

1) 创建托管对象 A、设置其属性并保存后,我可以获取刚刚创建的对象的“id”。

2) 抓取到这个“id”后,我可以在prepareForSegue方法中将这个NSManagedObjectId传递给View Controller 2,之后再使用ViewController2中的id来做我的删除工作。

这是唯一的方法/正确的方法吗,必须有更好的方法。

【问题讨论】:

    标签: iphone ios objective-c core-data persistent-storage


    【解决方案1】:

    有几种方法可以做到这一点;在不确切知道您要达到的目标的情况下,我只能给出一些通用的 cmets。

    首先,如果有另一种方法,将 id 传递给 View Controller 2 可能不是很理想,因为您在视图控制器级别公开实现细节。

    有没有办法从 VC2 中查询 Core Data 并找出需要删除的内容?

    【讨论】:

    • 这正是我想要弄清楚的,我不知道该怎么做,你是对的,我不想在视图控制器之间来回传递我的 NSManagedObjectID,我也不想来回传递托管对象。我真的不知道解决这个问题的最佳方法
    【解决方案2】:

    获取您创建的托管对象的实例并将其传递给第二个视图控制器。当你想删除它时:

    NSManagedObjectContext *moc = self.managedObject.managedObjectContext;
    [moc deleteObject:self.managedObject];
    [moc save:&error];
    

    【讨论】:

    • 如何获取我创建的托管对象的实例?我只知道如何使用“insertNewObjectForEntityName:inManagedObjectContext:”创建托管对象实例,但是在创建托管对象之后,如何获取刚刚创建的实例。这基本上是我的问题的症结所在。
    • 该方法返回新实例。你明白什么是指针吗?实例究竟是什么?
    • 在这里粘贴一些代码 sn-p 可能会有所帮助。我已尝试遵循您的建议,但我的对象仍未被删除。在视图控制器 1 中,我通过执行以下操作获得了我创建的托管对象的实例: CurrentUser *user = (CurrentUser *)[NSEntityDescription insertNewObjectForEntityForName:@"CurrentUser" inManagedObjectContext:self.managedObjectContext]; self.managed_object_instance = user (managed_object_instance 是 NSManagedObject) 这是我如何获取我创建的对象的实例吗?
    • 是的,userCurrentUser 实体的实例。您如何确定对象是否被删除?
    • 然后我将 self.managed_object_instance 传递给 prepareForSegue 方法中的第二个视图控制器。在传递它之后,我在第二个视图控制器的 viewdidLoad() 方法中调用了一个函数,该函数基本上删除了对象并保存。然后我尝试在 MOC 上执行 fetch,如果 fetch 查询结果为空数组,则该对象已从我的商店中删除。我注意到这仅在我完全重置模拟器内容和设置时才对我有用,否则我传递的对象永远不会被删除,或者它可能是但它没有被写入。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多