2 つのNSManagedObjectサブクラスがBookありCategoryます。この 2 つは 1 対多の関係で関連付けられています。
一方で、 に接続されたBook関係があります。経由で逆接続。categoriesCategoryCategoryBookbooks
私のアプリのセットアップは、アプリが開くたびにサーバーからデータをダウンロードすることです。ダウンロードされたデータはトラバースされ、アプリ内に保存されます。私のアプリでは、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