0

我有两个NSManagedObject子类,BookCategory. 两者是一对多的关系。

另一方面Book,它与 有categories关系Category。反向Category连接到Bookvia 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 被成功保存。但是在第二个循环和下一个循环中,Category不能再查询了。它返回 nil,尽管identifier是相同的。

我确实对所有Category通孔进行了检查[Category findAll]并遍历了所有记录,发现Category在第二个和下一个循环中仍然存在具有相同 id 的。

问题是为什么在第二个循环findFirstByAttribute:withValue:中检索失败?Category

4

1 回答 1

1

我通过将MagicalRecord更新到最新版本 (2.1) 解决了这个问题。

然后我修改了我的NSManagedObject保存方法saveNestedContexts从新添加的方式saveUsingCurrentThreadContextWithBlockAndWait

于 2013-02-28T06:42:23.797 回答