首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NSManagedObjectContext():` `init()`在iOS 9.0中已弃用:请使用-initWithConcurrencyType

NSManagedObjectContext():` `init()`在iOS 9.0中已弃用:请使用-initWithConcurrencyType
EN

Stack Overflow用户
提问于 2015-08-18 13:37:21
回答 2查看 10.5K关注 0票数 29

我是通过Core Data Stack in Swift - Demystified工作的,但当我到了线上

代码语言:javascript
复制
self.context = NSManagedObjectContext()

我收到了警告

代码语言:javascript
复制
`init()` was deprecated in iOS 9.0: Use -initWithConcurrencyType: instead

我看到我可以为self.context =执行以下操作之一

代码语言:javascript
复制
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.ConfinementConcurrencyType)
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)

但是由于ConfinementConcurrencyType现在也被弃用了,所以剩下的就是MainQueueConcurrencyTypePrivateQueueConcurrencyType。这两个有什么区别?我应该如何选择使用哪一个?我读了this documentation,但我并不是真的理解。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-18 14:07:58

本质上,使用NSMainQueueConcurrencyType时,您将始终至少有一个上下文,而使用NSPrivateQueueConcurrencyType时,您将始终具有许多上下文。NSPrivateQueueConcurrencyType通常用于在后台保存或获取核心数据(就像尝试与Web Service同步记录一样)。

NSMainQueueConcurrencyType创建一个与主队列相关联的上下文,该上下文非常适合与NSFetchedResultsController一起使用。

默认的核心数据堆栈使用具有NSMainQueueConcurrencyType的单个上下文,但是您可以通过利用多个NSPrivateQueueConcurrencyType来执行任何不影响UI的工作来创建更好的应用程序。

票数 32
EN

Stack Overflow用户

发布于 2015-09-29 15:52:21

将这两个函数替换为以下函数:

代码语言:javascript
复制
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()
        }
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32064295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档