mutableCopy调用是否返回一个包含托管对象上下文副本的数组?

时间:2014-04-23 20:24:31

标签: objective-c core-data nsmanagedobjectcontext

在一个教程中,我正在从预制件中学习CoreData,以便在笔记应用程序中获取笔记集合:

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Note"];

    self.notes = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    [self.tableView reloadData];
}

首先,notes是一个NSMutableArray,所以请告诉我,我是否理解正确:

  1. 他们创建一个NSManagedObjectContext对象来保存上下文。

  2. 他们创建了一个从数据库文件中获取“Note”实体的请求。

  3. 他们使用managedObjectContext用请求的请求(即fetchRequest)调用executeFetchRequest。现在这里是我不完全理解的部分(可能还有一些以前的部分,如果我没有,请纠正我):

  4. 我从这个调用[managedObjectContext executeFetchRequest:fetchRequest error:nil];获得的对象类型是NSSet吗?并通过调用mutableCopy我正在返回一个数组?

    由于

1 个答案:

答案 0 :(得分:0)

[managedObjectContext executeFetchRequest:fetchRequest error:nil]

返回一个(不可变的)NSArraymutableCopy创建一个 - well-mutable副本 那个数组。它不会复制数组或上下文中的托管对象。 它只允许您修改self.notes,例如添加,删除或重新排列对象 在可变阵列中。

备注:如果在表格视图中显示Core Data fetch请求中的对象 那么你应该看看NSFetchedResultsController。它可能看起来更多一点 在开头很复杂,但允许(例如)自动更新 表视图是否插入,删除或修改对象。