繁体   English   中英

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

[英]Swift - 'init()' was deprecated in iOS 9.0: Use -initWithConcurrencyType: instead

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

    var managedObjectContext = NSManagedObjectContext()

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

是什么原因造成的? 如何解决此问题?

更改为:

var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)

您可以下载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()

因此,似乎NSManagedObjectContext()使用“ ConfinementConcurrencyType”进行初始化。当Apple在iOS 9.0中弃用“ ConfinementConcurrencyType”时,出于一致性考虑,Apple并未更改init()方法的行为。 因此,最好将另一个NSManagedObjectContextConcurrencyTypes(PrivateQueueConcurrencyType,MainQueueConcurrencyType)与另一个init方法一起使用:

init(concurrencyType: NSManagedObjectContextConcurrencyType)

苹果改变了核心数据的工作方式。 不要使用init(),而是根据需要/建议使用initWithConcurrencyType。

根本原因与线程安全性和对核心数据对象的异步访问有关。

通常,当Apple告诉您某些东西已被弃用时,您总是会收到如下消息:

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

显然,您需要做的就是遵循一个很强的提示:不要使用init。 阅读initWithConcurrencyType:的功能,找出正确的调用方法,然后将init调用替换为对initWithConcurrencyType的调用:

以此作为对一般问题的答案,因为实际上,您应该能够自己弄清楚这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM