2 つのNSManagedObject
サブクラスがBook
ありCategory
ます。この 2 つは 1 対多の関係で関連付けられています。
一方で、 に接続されたBook
関係があります。経由で逆接続。categories
Category
Category
Book
books
私のアプリのセットアップは、アプリが開くたびにサーバーからデータをダウンロードすることです。ダウンロードされたデータはトラバースされ、アプリ内に保存されます。私のアプリでは、Magical Recordを使用して CoreData とやり取りします。
Category
データは最初にダウンロードされ、後で JSON 形式で保存されます。
{
"categories" : [
{
"id" : 1,
"name" : "Fiction"
},
{
"id" : 2,
"name" : "Non-fiction"
}
]
}
保存に問題はありませんでしたCategory
。その後、アプリのライフサイクルBook
データは次のように JSON 形式で保存されます。
{
"books" : [
{
"id" : 1,
"name" : "Fiction 1",
"category_id" : 1
},
{
"id" : 2,
"name" : "Fiction 2",
"category_id" : 2
}
]
}
Book
に関係を割り当てたいときに問題が発生しCategory
ます。関係を割り当てる私のコード:
for (NSDictionary *bookInfo in jsonObject[@"books"]) {
Book *book = [Book createEntity];
book.identifier = bookInfo[@"id"];
book.name = bookInfo[@"name"];
Category *category = [Category findFirstByAttribute:@"identifier" withValue:bookInfo[@"category_id"]];
book.category = category;
[[NSManagedObjectContext contextForCurrentThread] saveNestedContexts];
}
最初のループで、bookObject が正常に保存されました。しかし、2 回目以降のループでは、Category
これ以上クエリを実行できません。同じにもかかわらず、nil を返しますidentifier
。
Category
すべてのビアでチェックを実行し、[Category findAll]
すべてのレコードをトラバースしたところCategory
、同じ ID を持つ が 2 番目と次のループにまだ存在していることがわかりました。
問題は、2 番目のループでfindFirstByAttribute:withValue:
取得に失敗した理由です。Category