Objective c NSFetchRequest查询在设置一对多关系后返回nil

Objective c NSFetchRequest查询在设置一对多关系后返回nil,objective-c,core-data,nspredicate,nsfetchrequest,magicalrecord,Objective C,Core Data,Nspredicate,Nsfetchrequest,Magicalrecord,我有两个NSManagedObject子类,Book和Category。这两者是一对多的关系 在Book侧,它具有连接到Category的关系categories。通过书籍反向连接到书籍 我的应用程序设置是每次打开应用程序时从我的服务器下载数据。下载的数据将被遍历并保存在应用程序中。在我的应用程序中,我使用与CoreData交互 Category数据将首先下载,然后以JSON格式保存: { "categories" : [ { "id" : 1,

我有两个
NSManagedObject
子类,
Book
Category
。这两者是一对多的关系

Book
侧,它具有连接到
Category
的关系
categories
。通过
书籍
反向连接到
书籍

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

Category
数据将首先下载,然后以JSON格式保存:

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

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

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成功保存。但是在第二个循环和下一个循环中,无法再查询
类别。它返回nil,尽管
标识符
相同

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


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

我通过更新到最新版本(2.1)修复了此问题


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

我刚刚发现
saveUsingCurrentThreadContextWithBlockAndWait
在使用
saveWithBlockAndWait
的旧iOS5设备上工作每次都会崩溃。谢谢你的提示,威利。