我有两个NSManagedObject
子类Book
和Category
。这两者是通过一对多的关系来解决的。
在Book
方面,它与[{1}}的关系categories
已关联。反之Category
通过Category
与Book
相关联。
我的应用设置是每次打开应用时从我的服务器下载数据。下载的数据将被遍历并保存在应用程序内。在我的应用中,我使用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:
?
答案 0 :(得分:1)
我通过将MagicalRecord更新到最新版本(2.1)来解决此问题。
然后我将我的NSManagedObject
保存方法从saveNestedContexts
修改为新添加的saveUsingCurrentThreadContextWithBlockAndWait
。