5

我无法理解 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 等。

4

1 回答 1

4

NSMainQueueConcurrencyType.

UI 事件(例如视图确实加载)发生在主线程上。您将在主线程上操作您的对象(本例中为 self.items),因此您应该确保将它们提取到上下文中/也保存在该线程上。

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

于 2012-09-13T07:35:53.947 回答