我是通过Core Data Stack in Swift - Demystified工作的,但当我到了线上
self.context = NSManagedObjectContext()
我收到了警告
`init()` was deprecated in iOS 9.0: Use -initWithConcurrencyType: instead
我看到我可以为self.context =
执行以下操作之一
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.ConfinementConcurrencyType)
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)
但是由于ConfinementConcurrencyType
现在也被弃用了,所以剩下的就是MainQueueConcurrencyType
和PrivateQueueConcurrencyType
。这两个有什么区别?我应该如何选择使用哪一个?我读了this documentation,但我并不是真的理解。
发布于 2015-08-18 14:07:58
本质上,使用NSMainQueueConcurrencyType
时,您将始终至少有一个上下文,而使用NSPrivateQueueConcurrencyType
时,您将始终具有许多上下文。NSPrivateQueueConcurrencyType
通常用于在后台保存或获取核心数据(就像尝试与Web Service同步记录一样)。
NSMainQueueConcurrencyType
创建一个与主队列相关联的上下文,该上下文非常适合与NSFetchedResultsController
一起使用。
默认的核心数据堆栈使用具有NSMainQueueConcurrencyType
的单个上下文,但是您可以通过利用多个NSPrivateQueueConcurrencyType
来执行任何不影响UI的工作来创建更好的应用程序。
发布于 2015-09-29 15:52:21
将这两个函数替换为以下函数:
lazy var managedObjectContext: NSManagedObjectContext = {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.
let coordinator = self.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
// MARK: - Core Data Saving support
func saveContext () {
if managedObjectContext.hasChanges {
do {
try managedObjectContext.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
abort()
}
}
}
https://stackoverflow.com/questions/32064295
复制相似问题