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

标签 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数组中对象的属性显示view,比如item.image, item.title, item.descriptionText等

最佳答案

NSMainQueueConcurrencyType

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

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

关于IOS CoreData,使用哪个 NSManagedObjectContextConcurrencyType,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399277/

相关文章:

iphone - iOS - 使用 NSEntityDescription 和 NSManagedObjectContext 编辑数据库条目

ios - nil 不是合法的 NSManagedObjectContext 参数

ios - Cordova/iOS:如何关闭使用InAppBrowser打开的 native 浏览器窗口?

ios - 在 Core Data 中存储自定义对象的 NSMutableArray

iphone - NSPredicate 用于在关系实体中搜索

ios - 核心数据的UISearchBar性能问题

iphone - insertNewObjectForEntityForName :inManagedObjectContext: returning NSNumber bug?

ios - KeychainItemWrapper 奇怪的行为,相同项目的现有/不存在项目错误

ios - 扩展 Swift 数组以复制 indexOfObject 函数

ios - 确保属性观察者 didSet 在 vi​​ewDidLoad 之后操作用户界面