保存上下文不会保留更新的NSManagedObject

时间:2014-01-12 09:45:26

标签: ios objective-c core-data nsmanagedobject nsmanagedobjectcontext

在我的应用程序中,我有2个详细视图控制器:

  • 产品名称更新控制器
  • 产品属性更新控制器

产品属性更新视图控制器一切都很好没有错。

产品名称更新视图控制器中,但保存上下文不会产生任何错误。我看到根视图控制器中的产品名称发生了变化,但是当我重新打开我的应用程序时,产品名称会显示旧名称。所以它不会持久存在。

根据我的updateProduct方法,我的问题是什么:

-(void)updateProduct:(id)sender
 {
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *context = [delegate managedObjectContext];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Products" inManagedObjectContext:context]];

NSError *error = nil;

NSPredicate *predicateID =[NSPredicate predicateWithFormat:@"productID==%d",[secim intValue]];
[request setPredicate:predicateID];

NSArray *myobj=[context executeFetchRequest:request error:&error];
NSManagedObject *prod1=[myobj objectAtIndex:0];

[prod1 setValue:textProduct1.text forKey:@"productName"];



if (![context save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}


[self.navigationController popToRootViewControllerAnimated:YES];

NSLog(@"Data saved");
}

2 个答案:

答案 0 :(得分:0)

如果调用了updateProduct方法,请检查断点。我怀疑它不是。

根据其他讨论,请确保

  • 托管对象上下文不是nil
  • prod1(托管对象)不是nil

您可以在调试器中使用断点或使用日志语句执行此操作。

答案 1 :(得分:0)

@Mundi 之外,您还在执行以下操作

NSArray *myobj = [context executeFetchRequest:request error:&error];
NSManagedObject *prod1 = [myobj objectAtIndex:0];

但您不会检查error,如果myobj包含元素,则不会。

总是检查错误,但有可能有错误。