Objective C - 核心数据记录更新

时间:2011-04-29 12:41:24

标签: core-data nsmanagedobject

我必须更新核心数据中的一些记录。这是正确的方法吗?

NSManagedObjectContext *context = [self managedObjectContext];
NSMutableArray *poiFromCD=(NSMutableArray *)[self takePoiFromCoreData];

for (int i=0; i<[array count]; i++) {
  for (int j=0; j<[poiFromCD count]; j++) {
    Poi *poi=(Poi *)[poiFromCD objectAtIndex:j];
    if ([[[array objectAtIndex:j]objectForKey:@"poiID"]isEqualToString:poi.poiID]) {
      Poi *p=[poiFromCD objectAtIndex:j];
      p.poiID=[[array objectAtIndex:i]objectForKey:@"poiID"];
      p.lastmod=[[array objectAtIndex:i]objectForKey:@"lastmod"];
   } else {
      Poi *p;
      p=[NSEntityDescription insertNewObjectForEntityForName:@"Poi" inManagedObjectContext:context];
      p.poiID=[[array objectAtIndex:i]objectForKey:@"poiID"];
      p.lastmod=[[array objectAtIndex:i]objectForKey:@"lastmod"];
   }
 }
}

NSError *error;
if (![context save:&error]) {
NSLog(@"Errore durante il salvataggio: %@", [error localizedDescription]);
}

我将一个数组传递给我的方法,然后我将已经存在于CoreData中的数据放入poiFromCD中。

如果我错了,请指出正确的方法! :)

1 个答案:

答案 0 :(得分:0)

不,这不是更新Core Data对象的标准方法。您显然正在尝试将Core Data视为SQL,但这不起作用。

核心数据不是SQL。实体不是表格。对象不是行或记录。属性不是列。核心数据是一个对象图管理系统,可能会或可能不会持久保存对象图,并且可能会或可能不会使用远远落后的SQL来执行此操作。试图用SQL术语来思考核心数据将导致你完全误解核心数据并导致更多的悲伤和浪费时间。

在不知道你的数据模型是什么样的情况下,我不知道你要做什么,但你很少需要逐步完成这样的对象数组。