2016-11-30 7 views
2

データモデルとコアデータを既存のプロジェクトに追加しました。オブジェクトを書き込んで保存/挿入できますが、 。私は間違って何をしていますか? Core Dataの仕組みを誤解していますか?コアデータ - 最初に挿入することなくフェッチできません

私はオブジェクトを挿入して、以下のコードで目的の結果を得ることができますが、最初に挿入することなくオブジェクトを取得することはできません。私はアプリがそれを覚えているように "トークン"を保存したい。

let dc = DataController() 
let moc = dc.managedObjectContext 

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Token") 
//fetchRequest.returnsObjectsAsFaults = false 

do { 
    let entities = try moc.fetch(fetchRequest) as! [NSManagedObject] 
    print(entities.count) // prints 0 
    print(entities) // prints [] 
    for entity in entities { 
     print(entities.count) // these dont work because of 0 results 
     print(entity) // these dont work because of 0 results 
    } 
} catch { 
    print("could not fetch") 
} 

デバッグログは:

0 
[] 
CoreData: annotation: Connecting to sqlite database file at "/Users/xxxx/Library/Developer/CoreSimulator/Devices/1231231-123123-123123-123123-123123123/data/Containers/Data/Application/123123-123123-123123-123123-123123123/Documents/DataModel.sqlite" 
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'Z_METADATA' 
CoreData: sql: pragma recursive_triggers=1 
CoreData: sql: pragma journal_mode=wal 
CoreData: sql: SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA 
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'Z_MODELCACHE' 
CoreData: annotation: Disconnecting from sqlite database. 

私はsqliteのファイルを開いていると私は前に挿入したオブジェクトが存在します。

+0

は、なぜあなたは、あなたが取得することができますと思いますか空のデータベースからのデータ? – shallowThought

答えて

1

このようにデータを取得することができます。

func retriveSaveData(){ 

    let request:NSFetchRequest<TestData> = TestData.fetchRequest() 
    do { 
     let data = try managedObjectcontext.fetch(request) as [TestData] 

     if let str = data.first?.name{ 
      // Your retrieve data 
      print(str) 
     } 
    }catch{ 
     let error = error as NSError 
     print("\(error)") 
    } 
} 

データの保存および更新用。

func saveToDataBase(data:[TestData]){ 
     for data1 in data{ 

      let request:NSFetchRequest<TestData> = TestData.fetchRequest() 
      do { 
       let count = try managedObjectcontext.count(for: request) 
       if count == 0 { 
        // save data according to your requirement. 
        print(data1) 
       }else{ 

        //if anything you want to update then wright here 
       } 

      }catch{ 
       let error = error as NSError 
       print("\(error)") 
      } 
     } 
    } 

はあなたが永続ストアに探している実体を知っているので、それは(今スウィフト3でジェネリックです)NSFetchRequestはトークンオブジェクトであることを確認し、あなたに

+0

ありがとうございました!それは今働きます! –

+0

さらに、データの更新と保存を追加します。 –

0

を助けることを願っています:

let fetchRequest = NSFetchRequest<Token>(entityName: "Token") 

あなたにも、同様のトークン項目として、それを唱えるかもしれません:

let entities = try moc.fetch(fetchRequest) as! Token 
関連する問題