2017-02-25 35 views
0

其實我有一些CoreData與iOS 10的經驗。
但我現在創建一個應用程序,它是tartget #version 8.0及以上。
首先我創建一個包含coreData的應用程序。所以他們會自動生成一個iOS 10標準的AppDelegate代碼。當我將目標10更改爲8.0時,AppDelegate會顯示一些錯誤。
如何解決AppDelegate中的coreData錯誤?

錯誤的AppDelegate

enter image description here

如何解決這個問題?我想在ios 8.0及以上版本中使用coreData。

// 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: "coreDataTestForPreOS") 
     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 
    }() 

    // MARK: - Core Data Saving support 

    func saveContext() { 
     let context = persistentContainer.viewContext 
     if context.hasChanges { 
      do { 
       try context.save() 
      } catch { 
       // 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. 
       let nserror = error as NSError 
       fatalError("Unresolved error \(nserror), \(nserror.userInfo)") 
      } 
     } 
    } 

} 

let ad = UIApplication.shared.delegate as! AppDelegate 
let context = ad.persistentContainer.viewContext 
+0

查看我的答案。 – iAviator

回答

1

NSPersistentContainer便利之前有NSPersistentStoreCoordinator。你需要創建這些之一:

if 
     let modelURL = Bundle.main.url(forResource: "Model", withExtension: "momd"), 
     let model = NSManagedObjectModel(contentsOf: modelURL), 
     let psc = NSPersistentStoreCoordinator(managedObjectModel: model) { 
      ... 
    } 

然後創建並通過.addPersistentStore(ofType:configurationName:at:options)添加一個或多個NSPersistentStore s到它。

+0

在哪裏?我不明白。我是iOS的初學者,不是專家,請簡單地解釋我在哪裏添加以及如何工作。 – Alwin

2
var context: NSManagedObjectContext? 

if #available(iOS 10.0, *) { 
    context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
} else { 
    // iOS 9.0 and below - however you were previously handling it 
    guard let modelURL = Bundle.main.url(forResource: "Model", withExtension:"momd") else { 
     fatalError("Error loading model from bundle") 
    } 
    guard let mom = NSManagedObjectModel(contentsOf: modelURL) else { 
     fatalError("Error initializing mom from: \(modelURL)") 
    } 
    let psc = NSPersistentStoreCoordinator(managedObjectModel: mom) 
    context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType) 
    let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) 
    let docURL = urls[urls.endIndex-1] 
    let storeURL = docURL.appendingPathComponent("Model.sqlite") 
    do { 
     try psc.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: storeURL, options: nil) 
    } catch { 
     fatalError("Error migrating store: \(error)") 
    } 

}` 
+0

我在哪裏寫?你可以編輯我的代碼,並在saveContext()中重新發布 – Alwin

+0

? – Alwin

相關問題