NSPersistentContainer仅在10.0或更新版本中可用:错误

时间:2016-10-04 11:08:50

标签: ios iphone swift core-data ios10

这是因为我的部署目标小于10。

如何解决部署目标低至10.0?

enter image description here

4 个答案:

答案 0 :(得分:5)

其中一个解决方案是使用https://realm.io/docs/java/latest/#sharing-schemas

并添加

typealias NSPersistentContainer         = INSPersistentContainer
typealias NSPersistentStoreDescription  = INSPersistentStoreDescription

到您要使用的文件

答案 1 :(得分:3)

不可用表示无法使用。

有两种选择:

  • 仅使用 NSPersistentStoreCoordinator / NSManagedObjectModel模式。
  • 使用这两种模式,并使用可用性检查if #available(iOS 10, *)
  • 编写代码

答案 2 :(得分:2)

在iOS 10之前

您可以直接从AppDelegate.h

访问NSManagedObjectContext
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
if coordinator == nil {
    return nil
}
var managedObjectContext = NSManagedObjectContext()
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext

Original code

来自iOS 10及更新版

此更改并且NSManagedObjectContext已移至PersistentContainer属性 viewContext

lazy var persistentContainer: NSPersistentContainer = {
/*
 The persistent container for the application. This implementation
 creates and returns a container, having loaded the store for the
 application to it. This property is optional since there are legitimate
 error conditions that could cause the creation of the store to fail.
*/
let container = NSPersistentContainer(name: "")
...
...

original code

因此,您需要区分运行应用程序的版本,然后调用正确的函数。 AppDelegate中的ManagedObjectContext或[PersistentContainer viewContext]中的ManagedObjectContext。

btw:小心iOS 10之前的版本教程。

答案 3 :(得分:1)

使用@available标记,如下所示: @available(iOS 10.0, *) lazy var persistentContainer: NSPersistentContainer = ...