私はこのデータ構造をアプリケーションに持っています。あなたが見ることができるように、私は各車のブランドが1つのディーラーによって販売されており、ディーラーが複数のブランドを販売していることを前提としています。リレーショナルデータを保存する方法(コアデータ)
私は、WebサービスからCarBrandデータを取得しています。私は、データを保存する方法一括でデータを取得していますのでcarbrandデータはDelearレコード(したがって、私は、確立された関係を維持する)
に関連付けられているように、これは私の試みです:
let moc = DataController().managedObjectContext
let carbrandEntity = NSEntityDescription.insertNewObjectForEntityForName("carbrandEntity", inManagedObjectContext: moc) as! CarBrand
let dealerEntity = NSEntityDescription.insertNewObjectForEntityForName("DealerEntity", inManagedObjectContext: moc) as! Dealer
for carbrand in self.carbrandArray {
// add our data
carbrandEntity.setValue(carbrand[0], forKey: "brandname")
carbrandEntity.setValue(carbrand[1], forKey: "makeyear")
do {
try moc.save()
} catch {
fatalError("Failure to save context: \(error)")
}
}
dealerEntity.setValue("Steven&Sons", forKey: "name")
// How do I save dealer entity so that it is associated with the carbrand data that I just added.
UPDATE
これは私の試みですが、特定のディーラーを取得すると、私はディーラーの情報を取得しますが、CarBrand(NSSet)は常に空です。
let moc = DataController().managedObjectContext
let carbrandEntity = NSEntityDescription.insertNewObjectForEntityForName("carbrandEntity", inManagedObjectContext: moc) as! CarBrand
let dealerEntity = NSEntityDescription.insertNewObjectForEntityForName("DealerEntity", inManagedObjectContext: moc) as! Dealer
dealerEntity.setValue("Steven&Sons", forKey: "name")
for carbrand in self.carbrandArray {
// add our data
carbrandEntity.setValue(carbrand[0], forKey: "brandname")
carbrandEntity.setValue(carbrand[1], forKey: "makeyear")
}
do {
try moc.save()
} catch {
fatalError("Failure to save context: \(error)")
}
UPDATE
私はまだどのcarbandデータを取得していませんよ。私はフェッチで間違いを作ってるんだ場合はここで更新されたコード
let dealerEntity = NSEntityDescription.insertNewObjectForEntityForName("DealerEntity", inManagedObjectContext: moc) as! Dealer
dealerEntity.setValue("Steven&Sons", forKey: "name")
for c in self.carbrandArray {
dealerEntity.carbrand?.setValue(c[0], forKey: "brandname")
dealerEntity.carbrand?.setValue(c[1], forKey: "makeyear")
}
は、念のためですが、ここにあなたがチェックアウトするためにだから私は例を単純化し、私のCODE
let moc = DataController().managedObjectContext
let dealerEntity = NSFetchRequest(entityName: "DealerEntity")
do {
let dealers = try moc.executeFetchRequest(dealerEntity) as! [Dealer]
for d in dealers {
print(d.carbrand!.count) // Returns 0
}
} catch {
fatalError("Failed to fetch saved data: \(error)")
}
dealerEntityは自分dealerEntityにcarbrandEntitiesのあなたのセットを追加するためのsetValueを使用し、 "carbrand" という名前の属性を持っています。また、個々のcarbandEntityを個別に保存する必要はありません。あなたのdealerEntityを保存すると、Core Dataがそれを行います。あなたはそれにcarbandEntitiesのセットを追加した後であなたのdealerEntityを保存することができます。 –
@ dan-beaulieu答えにあなたのコメントを置き、コード例を表示できますか? – MwcsMac
各カーブランドにカーブランドオブジェクトを挿入する必要があります。カーブランドのディーラーを設定すると、Core Dataがカーブランドをディーラーに追加します。 'エンティティ'(テーブル)と 'オブジェクト'(行)を混在させないでください。 – Willeke