编辑核心数据中的属性

Posted

技术标签:

【中文标题】编辑核心数据中的属性【英文标题】:edit an attribute in core data 【发布时间】:2012-06-27 07:19:38 【问题描述】:

这是我编辑特定属性并将其保存到 sqlite 数据库的代码,但我无法将更改保存到数据库。

-(void)changeMemberKey

  NSEntityDescription *entityDesc=[NSEntityDescription entityForName:@"Table1" inManagedObjectContext:context];
  NSFetchRequest *request=[[NSFetchRequest alloc] init];
  NSPredicate *predicate=[NSPredicate predicateWithFormat:@"(member_id=Null)"];
  [request setPredicate:predicate];
  [request setEntity:entityDesc];
  Table1 *matches;
  NSError *error;

  NSArray *objects=[context executeFetchRequest:request error:&error];
  NSLog(@"Object count===%d",[objects count]);
  for(int i=0;i<[objects count];i++)
  
    matches=[objects objectAtIndex:i];
    Table1 *data=(Table1 *)matches;
    NSLog(@"Data before===%@",data);
    [data setValue:memberKey forKey:@"member_id"];
    [context save:&error];
    NSLog(@"Data after====%@",data);
    data=nil;
  

  entityDesc=nil;
  request=nil;
  matches=nil;
  error=nil;
  objects=nil;

【问题讨论】:

尝试将[context save:&amp;error];替换为if (! [context save:&amp;error]) NSLog(@"Couldn't save data! Error:%@", [error description]);。然后就可以看到是否保存成功了。如果没有,请编辑您的问题以添加日志。 实际上,您可以在for 循环之后保存您的数据,一次就可以了。 :) 感谢您的建议。我编辑了我的代码,例如 (! [context save:&error]) NSLog(@"Couldn't save data! Error:%@", [error description]);但没有错误,上下文已保存但未反映在数据库中 是否有任何日志输出(如 'Data before' 或其他)?顺便说一句,你如何声明你的context yes 正确获取日志输出,这意味着 Data before 以 null memberid 提供输出,Data after 以新 memberid 提供输出。上下文的声明如下: NSManagedObjectContext *context;在 .h 和 appDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];在 .m 文件中 context=[appDelegate managedObjectContext]; 【参考方案1】:

尝试将for循环替换为

for(Table1 * data in objects)
  data.member_id = memberKey;

if (! [context save:&error])
  NSLog(@"Couldn't save data! Error:%@", [error description]);

不确定它是否会起作用,请尝试一下。不管怎样,它更干净。

【讨论】:

以上是关于编辑核心数据中的属性的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 编辑、递增和保存属性到现有实体

使用表格视图编辑核心数据中单个属性的正确方法

xCode 4.2 核心数据如何在数据模型编辑器中使用 GUI 创建获取的属性?

核心数据:从详细视图编辑对象

核心数据编辑器和 NSManagedObjectSublcass 之间的差异

JDBC API 可滚动可编辑的结果集