NSManagedObjectContext不会持久更新对象

时间:2016-06-21 12:01:49

标签: ios objective-c core-data

我在数据库中有一个NSManagedObject(用户)。然后我尝试从数据库中获取该对象并更新字段firstName:

    NSFetchRequest *fetchR = [NSFetchRequest fetchRequestWithEntityName:@"User"];
    NSError *err = nil;
    NSArray *allUsers = [self.managedObjectContext executeFetchRequest:fetchR error:&err];

    TMUser *profile = allUsers.firstObject;
    [profile setValue:@"Username" forKey:@"firstName"];

    [self.managedObjectContext save:&err];
    if (err) {
        NSLog(@"Error: %@", err.localizedDescription);
    }

代码传递没有错误。但是,如果我重新启动我的应用程序,则获取请求重新启动用户而不更新字段" firstName"。我只有1个NSManagedObjectContext。所有Core Data堆栈都已成功初始化。获取后我的用户是:

Printing description of allUsers:
<_PFArray 0x14ed6600>(
ID:3451
firstName:Johnatan
lastName:Hike
phone:380995046960
email:igor@email.com
language:en
)

由于某些原因,对象更改未在上下文中注册(上下文中hasChanges = NO)。我究竟做错了什么?请帮忙

2 个答案:

答案 0 :(得分:0)

我认为你没有保存主上下文。

请检查您是否致电:

[managedObjectContext save:&error]; 

保存数据的所有子上下文

之后也在主背景上。

你有一个全局函数(在AppDelegate中)saveContext可以保存所有内容,我可以安全地从任何地方调用它。

答案 1 :(得分:0)

我解决了我的问题。我从xcdatamodeld方案重新创建了NSManagedObject子类,它可以工作。我发现如果我添加另一个属性(readonly等),与数据模型方案无关或将属性类型从NSNumber(又名bool)更改为BOOL,它会停止更新数据库中现有的对象。