2016-06-18 7 views
1

コアデータアプリケーションを作成しようとしていて、thisに基づいてコードを使用しています。コンテキストを保存するときに項目がコアデータに追加されない

私はこのような何か持っているコードを簡素化するには、次の

class City: NSManagedObject { 
    @NSManaged public private(set) var name: String 
    @NSManaged public private(set) var population: Int 

    public static func insert(context: NSManagedObjectContext, name: String, population: Int) -> City { 

     let city: City = context.insertObject() 
     city.name = name 
     city.population = population 

     return city 
    } 
} 


extension NSManagedObjectContext { 
    public func insertObject<A: NSManagedObject>() -> A { 
     guard let obj = NSEntityDescription.insertNewObjectForEntityForName("City", inManagedObjectContext: self) as? A else { 
      fatalError("Wrong object type") 
     } 

     return obj 
    } 

    public func saveOrRoleback() -> Bool { 

     do { 
      try save() 
      return true 
     } catch { 
      rollback() 
      return false 
     } 
    } 

    public func performChanges(block:() ->()) { 

     performBlockAndWait { 
      block() 
      print(self.saveOrRoleback()) 
     } 
    } 
} 


func addCity() { 
    self.context.performChanges { 
     City.insert(self.context, name: self.name.text!, amount: Int(self.population.text!)) 
    } 
} 

私は新しい都市を追加し、save()は、文脈上saveOrRollback()メソッド内で呼び出されると、私はエラーを取得しないが、それはtrueを返します。
しかし、データが追加されていません。私はSQLファイルをチェックしようとし、空です。

コアデータを初めて使う人は、どこで問題を探すか教えていただけますか?私は保存時にエラーや何かを得ることを期待していたが、すべてが正常であるように見えるが、データベースは常に空である。

編集: - 追加コアデータ・セットアップ

public func createContext() -> NSManagedObjectContext { 

    let context = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType) 
    context.persistentStoreCoordinator = createStoreCoordinator() 

    return context 
} 

private func createStoreCoordinator() -> NSPersistentStoreCoordinator { 

    let psc = NSPersistentStoreCoordinator(managedObjectModel: model.managedObjectModel) 

    try! psc.addPersistentStoreWithType(model.storeType.type, configuration: nil, URL: model.storeURL, options: nil) 

    return psc 
} 

// Main VC 
override func viewDidLoad() { 
    super.viewDidLoad() 

    let model = CoreDataModel(modelName: modelName, modelBundle: modelBundle!, storeType: .SQLite(DocumentsDirectoryURL())) 
    let factory = CoreDataFactory(model: model) 

    context = factory.createContext() 

    self.todayViewController = storyboard?.instantiateViewControllerWithIdentifier("TodayViewController") as! TodayViewController 
    self.todayViewController.context = context 
} 

編集2: - SQLのデバッグ、コメントで説明したようにデータ

-06-18 22:31:15.042 Savings+[1100:39698] CoreData: sql: BEGIN EXCLUSIVE 
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ? 
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ? 
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: COMMIT 
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: BEGIN EXCLUSIVE 
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: INSERT INTO ZTRANSACTION(Z_PK, Z_ENT, Z_OPT, ZAMOUNT, ZDATE, ZNAME, ZTYPE) VALUES(?, ?, ?, ?, ?, ?, ?) 
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: COMMIT 
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: sql: pragma page_count 
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: annotation: sql execution time: 0.0003s 
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: sql: pragma freelist_count 
+0

どのようにコンテキストを作成していますか?永続ストアコーディネータにアタッチされたメインキュー並行コンテキストですか? – SeanCAtkinson

+0

どのようにsqliteファイルを調べましたか?フェッチを実行してデータベースが空であることを確認しようとしましたか? – pbasdf

+0

@SeanCAtkinson:はい、それはMainQueueConcurrencyTypeであり、永続ストアコーディネータにも関連付けられています。私はメインビューコントローラでそれを作成し、それを他のビューコントローラに渡しています。 – Kobe

答えて

1

を追加した後/チャット:

  1. がいることを忘れないでくださいCoreDataのデフォルトジャーナルモードSQLiteデータベースはWALモードを使用するため、SQLリーダーがこれらのファイルを認識できるようにする必要があります。一般に、sqliteファイルを直接読み取るよりも、コードにフェッチを使用する方が簡単です。
  2. SQLDebugモードを使用して、実際にsqliteから読み書きされているものを確認してください。
  3. この場合、フェッチ要求に保存したすべてのオブジェクトを除外する既定の述語があることが判明しました。述部を削除すると、データが存在し、保存が正しく機能していることが示されます。
関連する問題