IOS CoreData,NSManagedObjectContextConcurrencyType使用哪个?为什么?

时间:2012-09-13 04:08:43

标签: ios core-data nsmanagedobjectcontext

我无法理解NSManagedObjectContextConcurrencyType的文档。我会针对以下情况使用哪种类型,为什么?

- (void)viewDidLoad
{
    self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:???];
    [self loadRecordsFromCoreData];
}


- (void)loadRecordsFromCoreData {

[self.managedObjectContext performBlockAndWait:^{
    //[self.managedObjectContext reset]; //do I need to do this?
    NSError *error = nil;
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Item"];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"display == YES"];
    [request setPredicate:predicate];
    [request setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES]]];

    self.items = nil;
    self.items = [self.managedObjectContext executeFetchRequest:request error:&error];

}];

[self displayItems];
}

-displayItems将根据self.items数组中对象的属性显示视图,例如item.image,item.title,item.descriptionText等。

1 个答案:

答案 0 :(得分:3)

NSMainQueueConcurrencyType

UI事件,例如视图确实加载,发生在主线程上。你将在主线程上操作你的对象(在这种情况下是self.items),所以你应该确保它们被提取到上下文/保存在那个线程上。

NSPrivateQueueConcurrencyType用于在后台线程上完成工作的上下文。