设置一对多关系后,NSFetchRequest查询返回nil

时间:2013-02-28 03:30:24

标签: objective-c core-data nspredicate nsfetchrequest magicalrecord

我有两个NSManagedObject子类BookCategory。这两者是通过一对多的关系来解决的。

Book方面,它与[{1}}的关系categories已关联。反之Category通过CategoryBook相关联。

我的应用设置是每次打开应用时从我的服务器下载数据。下载的数据将被遍历并保存在应用程序内。在我的应用中,我使用Magical Record与CoreData进行交互。

首先会下载

books数据,然后保存为JSON格式:

Category

保存{ "categories" : [ { "id" : 1, "name" : "Fiction" }, { "id" : 2, "name" : "Non-fiction" } ] } 时没有问题。稍后在应用生命周期Category上,数据将从JSON格式保存,如下所示:

Book

当我想将{ "books" : [ { "id" : 1, "name" : "Fiction 1", "category_id" : 1 }, { "id" : 2, "name" : "Fiction 2", "category_id" : 2 } ] } 关系分配给Book时,会出现问题。我的代码分配关系:

Category

在第一个循环中,bookObject已成功保存。但是在第二个循环和下一个循环中,无法再查询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]; } 。它返回nil,尽管Category是相同的。

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

问题是为什么Category无法在第二个循环中检索findFirstByAttribute:withValue:

1 个答案:

答案 0 :(得分:1)

我通过将MagicalRecord更新到最新版本(2.1)来解决此问题。

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