如何在Core Data中保留MSMutableArray?

时间:2014-01-14 19:22:19

标签: ios objective-c core-data nsmutablearray

我使用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?

1 个答案:

答案 0 :(得分:7)

数组中的项目已在Core Data中。如果你改变它们,你只需要保存它们。如果向该数组添加项目,则需要创建一个新的NSManagedObject实例并将其放入数组中。

您的代码暗示您不了解Core Data的基础知识。我强烈建议您查看有关此框架的文档,以便更好地了解它。