2017-02-09 2 views
1

Так что я получаю сообщение об ошибке, указанное в заголовке, когда я пытаюсь установить цель развертывания для iOS 9 (действительно, что ниже 10.0).Swift 3 - «NSPersistentContainer доступен только на ios 10 и новее»

Проблема существует здесь:

// MARK: - Core Data stack 

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: "Keebin_development_1") 
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in 
     if let error = error as NSError? { 
      // Replace this implementation with code to handle the error appropriately. 
      // fatalError() 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. 

     /* 
     Typical reasons for an error here include: 
     * The parent directory does not exist, cannot be created, or disallows writing. 
     * The persistent store is not accessible, due to permissions or data protection when the device is locked. 
     * The device is out of space. 
     * The store could not be migrated to the current model version. 
     Check the error message to determine what the actual problem was. 
     */ 
     fatalError("Unresolved error \(error), \(error.userInfo)") 
    } 
}) 
return container 
}() 

Глядя на различных SO вопросов/ответов стало ясно, что мне нужно добавить код, чтобы различать ли IOS 10 доступен или нет. Сам Swift 3 предлагает использовать @available(iOS 10.0, *). Однако этого недостаточно. Я ожидаю, что это беспросветно. Мне не хватает «если не доступно использовать это», но, будучи новым для программирования Swift и iOS, я не уверен, что писать конкретно. И я не могу найти ответа, дающего точный ответ о том, что писать. Может кто-нибудь помочь?

ответ

1

Вам действительно не нужно отличать iOS 10 от более ранних версий. NSPersistentContainer требует iOS 10, но старые методы все еще работают и по-прежнему поддерживаются. Если вам необходимо поддерживать iOS < 10, не используйте NSPersistentContainer. Это больше шагов для загрузки модели управляемого объекта и добавления постоянного хранилища, но это означает, что у вас может быть один кодовый путь для всех версий iOS.

5

У меня был такой же вопрос, и я решил по указанному ниже пути. я делал проект в Swift 3.0

  • Я использовал стручок «INSPersistentContainer» и установил стручок в моем проекте.
  • Импортные в APpDelegate по этой линии "import INSPersistentContainer"
  • Затем замените NSPersistentContainer с INSPersistentContainer

И вот все.

Теперь я могу запустить мое приложение в нижней версии прошивки (< IOS 10)

Надеется, что это поможет. Счастливое кодирование ...

+0

Это третья библиотека партии, хотя не так ли? Я надеялся, что есть способ решить его с помощью кода без сторонней библиотеки. –

1

NSPersistentContainer доступна только с прошивкой 10

Если вам все еще нужно ваше приложение работает в предыдущих версиях вы можете использовать старый Core Data Stack, который до сих пор работают в ИО 10

Другим решением было бы использование атрибут #available в swift для выполнения Core Data Stack или NSPersistentContainer.

Вы можете следить за https://stackoverflow.com/a/42392120/8023444 этот ответ на поддержку как ИОС 9 и ИОС 10

Смежные вопросы