2017-10-28 24 views
0

NSPersistanceContainerを使って生徒の詳細を保存するアプリを作成しました.jsonからデータを取得してdbに保存していますが、その時点では「私はフェッチ結果数が、私はsqliteのファイルをチェックするときのテーブルがあり、DBへ保存していながら、コンテキストが空ではありません0viewContextはデータベース(app.sqlite)に保存されていませんSWIFT

lazy var persistentContainer: NSPersistentContainer = { 

    let container = NSPersistentContainer(name: "Students_dev") 

    let storeURL = try! FileManager 
     .default 
     .url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 
     .appendingPathComponent("Students_dev.sqlite") 
    print("URL :",storeURL) 

    let storeDescription = NSPersistentStoreDescription(url: storeURL) 
    storeDescription.shouldMigrateStoreAutomatically = true 
    storeDescription.shouldMigrateStoreAutomatically = true 
    container.viewContext.automaticallyMergesChangesFromParent = true 
    container.persistentStoreDescriptions = [storeDescription] 

    container.loadPersistentStores(completionHandler: { (storeDescription, error) in 
     if let error = error as NSError? { 
      fatalError("Unresolved error \(error), \(error.userInfo)") 
     } 
    }) 
    return container 
}() 

// MARK: - Core Data Saving support 

func saveContext (context: NSManagedObjectContext) { 

    persistentContainer.performBackgroundTask({ (context) in 
     if context.hasChanges { 
      do { 
       try context.save() 
      } catch { 
       let nserror = error as NSError 
       fatalError("Unresolved error \(nserror), \(nserror.userInfo)") 
      } 
     } 
    }) 
} 

を返しアプリを再起動した場合の結果が> 0のカウントフェッチきメートル空の。私の側から欠けているものを手に入れませんでした。

ませデータは screenshot of sql log

答えて

0

問題がsaveContext機能にあった、コンテキストがコア・データに救われていない「persistentContainer.performBackgroundTask」私はそれにそれを削除し、正常に動作します。

func saveContext (context: NSManagedObjectContext) { 

    if context.hasChanges { 
     do { 
      try context.save() 
     } catch { 
      let nserror = error as NSError 
      fatalError("Unresolved error \(nserror), \(nserror.userInfo)") 
     } 
    } 
} 
0

私はCoreDataの警告の原因は、コード行であると思いSQLファイルに挿入されていない取得されている:

container.viewContext.automaticallyMergesChangesFromParent = true 

あなたが前にviewContextにアクセスしていますストアが読み込まれます。ロード永続ストア完了ブロック内のその行を移動してみてください:

container.loadPersistentStores(completionHandler: { (storeDescription, error) in 
    if let error = error as NSError? { 
     fatalError("Unresolved error \(error), \(error.userInfo)") 
    } 
    container.viewContext.automaticallyMergesChangesFromParent = true 
}) 
+0

コードは今、その警告がなくなってきたが、私はsqlliteファイルをチェックする際のデータは、私が空に表示されます。 – Joe

+0

saveContextメソッドでブレークポイントを設定して、context.hasChangesがtrueであることを確認しましたか?私はあなたが新しいオブジェクトを作成したコンテキストを保存していないかもしれないと推測できますか? – kharrison

+0

context.hasChangesは – Joe

関連する問題