【发布时间】:2013-07-09 13:07:01
【问题描述】:
我有 90 个名为“ItemModel”的 CoreData 实体,具有 2 个属性“uid”、“description”,其中每个项目都作为 NSManagedObject 插入:
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName: @"ItemModel" inManagedObjectContext: AFYDelegate.managedObjectContext];
第一个服务器调用将“uid”分配给上面为键“uid”提取的 90 个项目中的每一个。上下文没有保存在这里。
在稍后的第二次服务器调用中,我喜欢使用 indexPath 为 NSManagedObject 的 每个 更新 90 个项目的“描述” - 通过获取每个对象并将其传递给以下方法并保存上下文:
[self updateItemToDataModel:object withData: description];
....
....
- (void)updateItemToDataModel:(NSManagedObject *) object withData:(NSString *)data
{
[object setValue:data forKey:@"description"];
NSError * error = nil;
if (![self.managedObjectContext save:&error]) {
//Handle any error with the saving of the context
NSLog(@"%@",error.localizedDescription);
}
}
上述方法在关闭模拟器并再次运行代码后更新 CoreData 工作正常,每个项目将有两个重复项,具有相同的“uid”和“描述”。这意味着我现在有 180 件商品。反复关闭和运行代码会创建越来越多的项目。
我尝试删除 updateItemToDataModel 方法,重置模拟器,它适用于 90 个项目。
如果有人可以提供帮助,我是 CoreData 的新手。如果我只想更新现有项目,我的代码有什么问题?
【问题讨论】:
-
您如何检索您的“对象”?你有那个代码吗?
-
通过 UICollectionView 和 NSFetchedResultsController 中的 indexPath 检索对象 - NSIndexPath *indexPath = [[self.collectionView indexPathsForSelectedItems] lastObject]; NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
标签: ios nsmanagedobject insert-update