2016-03-23 6 views
0

のXcodeからコアデータをチェックする方法はありますか?SWIFT:コアデータのレコードをチェック

私は、書き込まれたデータを返すことになっているときに、空の配列を返すに失敗したが読んでいない二つの機能を(DBから読み込まれ、DBに書き込む)作成しました。

機能:私は私のCoreDataエンティティですべてのレコードがあるかどうかのXcodeからチェックしたい

func writeData() { 
     appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
    context = appDel.managedObjectContext 

     let newRecord = NSEntityDescription.insertNewObjectForEntityForName("CountryList", inManagedObjectContext: context) as NSManagedObject 

     let timestamp = NSDate() 

     for geo in geoArray { 

     //geoArray - array of dictionaries ([CountryName: "Lithuania", TelCode: 370],[CountryName: "Belarus", TelCode: 375],[CountryName: "Latvia", TelCode: 371])    
     //geo - Dictionary of tipe <String: AnyObject> 
     // CoreData: countryName type is String 

     newRecord.setValue(timestamp, forKey: "dateUploaded") 
     newRecord.setValue(String(geo["CountryName"]!), forKey: "countryName") 

      do { 
       try context.save() 
       print("Saved successfully") 
      } catch _ { 
       print("there was issue saving data!") 
      } 

      } 


     } 







    func loadData(country: String) { 
     appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
     context = appDel.managedObjectContext 


     results = [AnyObject]() 

     let request = NSFetchRequest(entityName: "CountryList") 
     request.resultType = NSFetchRequestResultType.DictionaryResultType 

     request.predicate = NSPredicate(format: "countryName = %@", country) 



     let sort1 = NSSortDescriptor(key: "dateUploaded", ascending: true) 

     request.sortDescriptors = [sort1] 

     do { 
      results = try context.executeFetchRequest(request) 
      print(results!) 

     } catch _ { 
      print ("error trying to fetch!") 
     } 
    } 

。それは可能ですか?

おかげ

答えて

0

あなたが実際にループ内で同じコア・データ・オブジェクトを変更しています。最終的にループの終わりには、配列内に最後の国名を持つオブジェクトが1つだけ残されます。毎回ループの内側にnewRecordを作成する必要があります。

移動forループ内でこの行とそれが正常に動作する必要があります。あなたはコアデータの管理対象オブジェクトを作成し、ループや省内部でそれを変更している

let newRecord = NSEntityDescription.insertNewObjectForEntityForName("CountryList", inManagedObjectContext: context) as NSManagedObject

ノートは、同じオブジェクトを複数回保存されます。複数のオブジェクトを保存する場合は、毎回新しいオブジェクトを作成する必要があります。その値を設定して保存します。また、保存部分をループの外側に移動します。私がやろうとしていますものです

func writeData() { 
    let appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
    let context = appDel.managedObjectContext 
    let timestamp = NSDate() 
    for geo in geoArray { 
     let newRecord = NSEntityDescription.insertNewObjectForEntityForName("CountryList", inManagedObjectContext: context) as NSManagedObject 
     newRecord.setValue(timestamp, forKey: "dateUploaded") 
     newRecord.setValue(String(geo["CountryName"]!), forKey: "countryName") 
    } 
    do { 
     try context.save() 
     print("Saved successfully") 
    } catch _ { 
     print("there was issue saving data!") 
    } 

} 
+0

- 書き込みがうまく動作するかどうかをチェックする:)私はXcodeの – Almazini

+0

からCD内のレコードをチェックする方法おそらくない良い方法があるはずと思ったが、私たちは時々やることにあります永続的なストアパスを記録し、Finderでそのウィンドウを開き、必要なCoreDataファイルが書き込み後に作成されるかどうかを確認します。もちろん、これはSimulatorでしか動作しませんが、テストでは十分です。 DBが正しく書き込まれているかどうかを確認することができます。 DBがプロパティに書き込まれているかどうかを調べるための粗末な方法。コード自体にチェックインして、ファイルが存在し、サイズがゼロより大きいかどうかを確認することもできます。 DBからの書き込みと読み込みのためのコードを追加できますか? –

+0

はい、これは私のために働くでしょう。私のコードは疑問です。チェックしてください!あなたはどこを見てどのファイルを作成するべきかアドバイスできますか?おかげで – Almazini

関連する問題