我在数据库中有一个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)。我究竟做错了什么?请帮忙
答案 0 :(得分:0)
我认为你没有保存主上下文。
请检查您是否致电:
[managedObjectContext save:&error];
保存数据的所有子上下文
之后也在主背景上。
你有一个全局函数(在AppDelegate中)saveContext
可以保存所有内容,我可以安全地从任何地方调用它。
答案 1 :(得分:0)
我解决了我的问题。我从xcdatamodeld方案重新创建了NSManagedObject子类,它可以工作。我发现如果我添加另一个属性(readonly等),与数据模型方案无关或将属性类型从NSNumber(又名bool)更改为BOOL,它会停止更新数据库中现有的对象。