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设备上工作每次都会崩溃。谢谢你的提示,威利。