假设我有两个对象:文章和类别,两者之间有很多关系。为了这个例子,所有相关的类别都已添加到数据存储中。循环浏览包含文章编辑的数据时,需要保存类别关系信息。
我打算在-setValue
类中使用Article
方法来设置这样的关系:
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
if([key isEqualToString:@"categories"]){
NSLog(@"trying to set categories...");
}
}
问题是value
不是Category
,它只是一个包含类别标题的字符串(或字符串数组)。我当然可以在这个方法中为每个类别进行查找并分配它,但是在一次处理大量文章时这似乎效率低下。另一种选择是填充所有可能类别的数组并只过滤,但我的问题是存储该数组的位置?它应该是Article
上的类方法吗?有没有办法将其他数据传递给-setValue
方法?是否有另一个更好的选择来设定我没想到的关系?
感谢您的帮助。
答案 0 :(得分:4)
为什么要实现setValue:forKey:?您应该在这两个对象之间建立关系,这些对象设置为多对多,并直接使用该关系。在这看来你正在努力做到这一点。
此代码的最终目标是什么?
如果我理解正确,你有一大堆JSON数据,你想把它变成一个对象图,它匹配那个对象图是否正确?如果是这样,请查看我在其他答案中写的代码:
JSON and Core Data on the iPhone
在该答案中,我展示了如何以递归方式构造和解构与JSON结构相关的NSManagedObject图形。它比你现在要走的道路要容易得多。
答案 1 :(得分:2)
看起来你定义了一个1:1的关系,所以你试图说这篇文章属于一个且只属于一个类别。
当您填充一个对象时,您可能需要创建另一个对象;因此,在创建文章时,您需要检查核心数据存储中是否有正确类型的对象,如果它不存在,则创建它。当您拥有预先存在或刚刚创建的对象时,您可以将(它的关系)分配给关系ivar Category *或(多个关系)将其添加到表达关系的NSSet *。
所以是的,您确实需要查找并分配实际对象,因为您必须在托管对象上下文中创建与对象的关系,如果它不存在,则必须在创建该关系之前创建它。 / p>