0

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

4

1 に答える 1

1

MagicalRecordを最新バージョン (2.1) に更新することで、この問題を修正しました。

そして、NSManagedObject保存方法をsaveNestedContextsから 新しく追加した に変更しましsaveUsingCurrentThreadContextWithBlockAndWaitた。

于 2013-02-28T06:42:23.797 に答える