2017-02-25 10 views
0

実際には、iOS 10のcoreDataでいくつかの経験があります。
しかし、私は今tartgetが#version 8.0以上のアプリを作成しています。
まず、coreDataを含むアプリケーションを作成します。だから私はAppDelegateでiOS 10の標準としてコードを自動生成します。ターゲット10を8.0に変更すると、AppDelegateはいくつかのエラーを表示します。 AppDelegateでcoreDataエラーを解決するにはどうすればよいですか?

enter image description here

AppDelegateで

エラーがどのようにこの問題を解決するには? 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)経由で1つのまたは複数の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

どこに書きますか?上記の投稿コードを編集して、 – Alwin

+0

をsaveContext()に再投稿できますか? – Alwin

関連する問題