我的项目有点长,所以我会尝试用更简单的示例项目来表达我的问题。
假设我目前在我的核心数据模型中有三个实体:OneEntity,TwoEntity和ThreeEntity。每个实体都具有相同的属性:OneAttribute,TwoAttribute和ThreeAttribute。
有三个UITableViewControllers:OneTable,TwoTable和ThreeTable。每个表都列出了实体的所有条目。 OneTable列出OneEntity的所有条目,TwoTable列出TwoEntity的所有条目,ThreeTable列出ThreeEntity的所有条目。
在每个表中,原型单元格使用object.valueForKey(“OneAttribute”),object.valueForKey(“TwoAttribute”)和object.valueForKey(“ThreeAttribute”)来设置放入其中的标签的值。原型细胞。
我现在计划将所有实体合并为一个实体MergedEntity,其中包含上述重复属性OneAttribute,TwoAttribute和ThreeAttribute。
然后,例如,当在OneTable中使用object.valueForKey(“OneAttribute”)时,我怎么才输出以前保存到OneEntity中的MergedEntity中的条目?
答案 0 :(得分:0)
如果你要合并,你应该最终得到一个具有一个属性的实体,而不是3.这个实体也应该有一个'类型'属性,以便您可以告诉每个实例的用途。
现在,您的提取请求使用'类型'过滤每个视图控制器的结果(用实际类型替换"XXX"
,可能是字符串或int):
fetchRequest.predicate = NSPredicate(format: "type = %@", argumentArray: [ "XXX" ])
答案 1 :(得分:0)
找到答案。
像Wain所说,一般的方法是向合并的实体添加'type'属性。然后还有三个步骤适用于我的情况:
1)保存密钥时设置'type'属性的值(参见下面的最后一行)。
//1
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context : NSManagedObjectContext = appDel.managedObjectContext
//2
let newPost: NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName("MergedEntity", inManagedObjectContext: context)
//3
newPost.setValue("Test A", forKey: "OneAttribute")
newPost.setValue("Test B", forKey: "TwoAttribute")
newPost.setValue("Test C", forKey: "ThreeAttribute")
newPost.setValue("This is the search String to look for.", forKey: "type")
2)定义谓词常量。
let typePredicate = NSPredicate(format: "%K CONTAINS[cd] %@", "type", "This is the search String to look for.")
3)为获取请求添加谓词(参见下面的最后一行)。
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
self.managedObjectContext = appDel.managedObjectContext
let fetchRequest = NSFetchRequest()
// Edit the entity name as appropriate.
let entity = NSEntityDescription.entityForName("MergedEntity", inManagedObjectContext: self.managedObjectContext!)
fetchRequest.entity = entity
// Set predicate
fetchRequest.predicate = typePredicate
编辑:Wain善意添加了更多代码。他的代码结合了步骤2)和3) - 谢谢你的帮助。