我使用Core Data并将对象提取到NSMutableArray中:
NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
self.items = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
然后我使用这个可变数组在表视图中显示对象。此外,该数组中的数据随时间变化。我想将整个数组保存在Core Data中。
我最初的想法是从Core Data中删除所有项目,并通过对可变数组中的所有对象进行迭代,一次只保留一个:
- (void)persistAllItemsInCoreData{
[self clearAllItemsFromCoreData];
NSManagedObjectContext *context = [self managedObjectContext];
for(int i = 0 ; i < [items count] ; i++){
Item *item = [NSEntityDescription
insertNewObjectForEntityForName:@"Item"
inManagedObjectContext:context];
item = [items objectAtIndex:i];
}
NSError *error;
if (![context save:&error]) {
NSLog(@"Could not save data: %@", [error localizedDescription]);
}
}
然而,这不起作用。有没有更优雅的方法来使用Core Data持久保存NSMutableArray?
答案 0 :(得分:7)
数组中的项目已在Core Data中。如果你改变它们,你只需要保存它们。如果向该数组添加项目,则需要创建一个新的NSManagedObject
实例并将其放入数组中。
您的代码暗示您不了解Core Data的基础知识。我强烈建议您查看有关此框架的文档,以便更好地了解它。