【问题标题】:Managed Object saves with old data托管对象保存旧数据
【发布时间】:2011-02-15 17:54:51
【问题描述】:

我正在尝试将对象添加到 Core Data 中的持久存储中。
当用户点击保存按钮时,我在数据模型中初始化了一个新对象,它是 NSManagedObject 类的子类。

Profile *newProfile = [[Profile alloc] initWithEntity:[NSEntityDescription entityForName:@"Profile" inManagedObjectContext:MOC] insertIntoManagedObjectContext:MOC];

[newProfile setValue:userName.text forKey:@"userName"];
[newProfile setValue:txtInstitution.text forKey:@"institution"];

我可以在控制台中验证 userName 和 txtInstitution 的值是否正确且符合预期,并且该对象具有正确的属性。但是,它似乎使用与保存的 first 对象相同的值来保存对象。一次只创建一个配置文件,并在以这种方式添加每个配置文件后保存 MOC。

此外,当表尝试使用持久存储中的数据填充时,它将创建行,就好像存储中的对象与我当时创建的一样多,但它们都将具有相同的值。

【问题讨论】:

    标签: iphone objective-c core-data


    【解决方案1】:

    您确定从商店中正确检索对象吗?这听起来可能是您用于从存储中获取数据的获取请求和/或您显示数据的方式的问题。

    【讨论】:

    • 这是我没有想到的,我必须验证一下。
    • 好眼光,感谢您指出显而易见的事情。我确信它一定是存储错误。
    【解决方案2】:

    您没有为 NSManagedObjects 使用指定的初始化程序有什么特别的原因吗?

    - (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context

    所以你应该使用:

    Profile *newProfile = [NSEntityDescription insertNewObjectForEntityForName:@"Profile" inManagedObjectContext:self.MOC];

    还要确保您通过其属性(self.MOC,而不是直接的 ivar)访问您的 MOC,就像您使用 Apple 提供的模板一样,您会注意到 MOC 是通过其 getter 方法延迟加载的。

    【讨论】:

    • 是的,这是有原因的。这很可能是我的另一个错误。在此处检索对象的 dat,如果它不存在,则只需将其添加到持久存储中。 IE。如果在服务器端添加了特定对象,但 iPhone 尚未保存它。这样可以在手机离线时使用。
    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多