CoreData - 如何使用 NSPrivateQueueConcurrencyType 使用临时上下文执行 NSFetchRequest?
Posted
技术标签:
【中文标题】CoreData - 如何使用 NSPrivateQueueConcurrencyType 使用临时上下文执行 NSFetchRequest?【英文标题】:CoreData - How to do NSFetchRequest with temporary context with NSPrivateQueueConcurrencyType? 【发布时间】:2012-09-11 23:07:43 【问题描述】:从 ios 5 开始,CoreData 引入了自己的 private queue
,您可以在其中让一些操作 (especially save context
) 在后台运行。
这必须通过[context performBlock:...]
完成。
saving the context
很容易很好。但是,NSFetchRequest
怎么样?我的意思是如果我想获取一些东西并希望在后台获取呢?我不认为 [context performBlock..] 可以做到这一点。
还有新的方法吗?
【问题讨论】:
【参考方案1】:任何涉及NSPrivateQueueConcurrencyType
的NSManagedObjectContext
的内容都应包含在performBlock
块中。对于后台获取,您希望将托管对象传回主队列的上下文,如下所示:(请注意,这仅用于说明目的):
// assume self.managedObjectContext is a main queue context
NSManagedObjectContext *backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[backgroundContext performBlock:^
// do your fetch - e.g. executeFetchRequest
NSManagedObjectID *objID = [someManagedObject objectID];
[self.managedObjectContext performBlock:^
NSManagedObject *mainManagedObject = [self.managedObjectContext objectWithID:objID];
// do something now with this managed object in the main context
];
];
【讨论】:
谢谢。如果我想在后台获取一个 nsresultscontroller 并让主 UI 使用它怎么办?以上是关于CoreData - 如何使用 NSPrivateQueueConcurrencyType 使用临时上下文执行 NSFetchRequest?的主要内容,如果未能解决你的问题,请参考以下文章
CoreData - 如何使用 NSPrivateQueueConcurrencyType 使用临时上下文执行 NSFetchRequest?
如何使用 Swift 删除 coredata 中的特定记录?
如何使用 Swift3 访问 CoreData 中的数据索引
如何开始使用 SQLite、iCloud 和 CoreData?