やりたいことは、
CoreDataを使ってサーバよりデータを取得(JSON)し、保存したい。
です。
そもそものCoreDataの使い方がおかしい部分もあると思いますが、
何卒お知恵をお貸しください。
Xcode:Version 8.2.1
Target:10.2
---------------------------------------------- [ENTITIES] City [Attributes] id:String name:String [Relationships] Relationship:pref Destination:Pref Inverse:city ---------------------------------------------- ---------------------------------------------- [ENTITIES] Pref [Attributes] id:String name:String [Relationships] Relationship:city Destination:City Inverse:pref ----------------------------------------------
JSONデータ [ {"id":"1","name":"札幌市","pref":"1","pref_name":"北海道"}, {"id":"2","name":"函館市","pref":"2","pref_name":"北海道"} ]
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext for city in json as! NSArray { if let values = city as? NSDictionary { let city = City(context: self.context) city.id = values["id"] as? String city.name = values["name"] as? String city.pref = getPref(code: (values["pref"] as? String)!) } } (UIApplication.shared.delegate as! AppDelegate).saveContext() func getPref(pref: String) -> Pref { let fetchRequest: NSFetchRequest<Pref> = Pref.fetchRequest() fetchRequest.predicate = NSPredicate(format: "pref = %@", pref) var data: [Pref] = [] do { data = try context.fetch(fetchRequest) } catch { print("Task Fetching Failed.") } return data[0] }
みなさまにお伺いしたいことは、
1)relationshipの処理
city.pref = getPref(code: (values["pref"] as? String)!)
としてますが、
city.pref.id = values["pref"] as? String
city.pref.name = values["pref_name"] as? String
としたいのですが、データが入っていきません。
もっと簡単なやり方などございませんでしょうか?
2)メモリ管理
アプリがクラッシュして落ちます。
たまに成功するときもあります。
落ちる箇所もバラバラです。
データ件数も400件程度なのですが、うまくいきません。
落ちる箇所は、
context.save()
上記のfor文の中
がほとんどです。
個人的にも調べてはみましたが、どうもメモリの使いすぎなのでは?
と思っております。
というものの、どこをどうすれば良いのか?が全くわからない状況です。
あなたの回答
tips
プレビュー