Swift - 在iOS 9.0中不推荐使用'init()':使用-initWithConcurrencyType:代替

sen*_*nty 1 ios swift ios9 swift2.1

我的模型在线上有错误(黄色警告):

    var managedObjectContext = NSManagedObjectContext()
Run Code Online (Sandbox Code Playgroud)

'init()' was deprecated in iOS 9.0: Use -initWithConcurrencyType: instead

是什么造成的?我该如何解决这个问题?

wj2*_*061 8

将其更改为:

var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
Run Code Online (Sandbox Code Playgroud)

您可以下载Apple的文档以查看更多详细信息.

NSConfinementConcurrencyType
指定上下文将使用线程限制模式.
适用于iOS 3.0及更高版本.
在iOS 9.0中不推荐使用.

或Command +单击"NSManagedObjectContext"直接到NSManagedObjectContext.h:

@available(iOS, introduced=3.0, deprecated=9.0, message="Use another NSManagedObjectContextConcurrencyType")
case ConfinementConcurrencyType

@available(iOS, introduced=3.0, deprecated=9.0, message="Use -initWithConcurrencyType: instead")
public convenience init()
Run Code Online (Sandbox Code Playgroud)

所以似乎NSManagedObjectContext()使用"ConfinementConcurrencyType"来初始化.当Apple在iOS 9.0中弃用"ConfinementConcurrencyType"时,为了保持连贯性,Apple没有改变init()方法的行为.因此,您最好将另一个NSManagedObjectContextConcurrencyTypes(PrivateQueueConcurrencyType,MainQueueConcurrencyType)与另一个init方法一起使用:

init(concurrencyType: NSManagedObjectContextConcurrencyType)
Run Code Online (Sandbox Code Playgroud)