【发布时间】:2016-02-18 12:59:51
【问题描述】:
在我的项目中,我有两个实体:personEntity 和 municipalEntity。它们之间具有多对多的反比关系。我在personEntity 上执行NSFetchRequest 以获取某人的详细信息:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context = appDelegate.managedObjectContext
let personRequest = NSFetchRequest(entityName: "personEntity")
let personPred = NSPredicate(format: "surname = %@", "Smith")
personRequest.predicate = personPred
do {
let personsList = try context.executeFetchRequest(personRequest)
// this all clear enough up to this point
此时,我尝试在第一个中嵌套第二个,谓词FetchRequest。此请求应在其peopleInMunicipality 关系属性中搜索municipalEntity,以查找来自personsList 的对象。
for selectedPeople in personsList {
let municipalRequest = NSFetchRequest(entityName: "municipalEntity")
let municipalPred = NSPredicate(format: "peopleInMunicipality = %@", selectedPeople)
municipalRequest.predicate = municipalPred
do {
let municipalitiesWithResidentsCalledSmithList = try context.executeFetchRequest(municipalRequest)
然后砰...编译器抱怨并建议我需要更改定义第二个谓词的行中的两件事。它建议...
let municipalPred = NSPredicate(format: "peopleInMunicipality = %@", argumentArray: selectedPerson as? [AnyOject])
编译器现在很高兴,但是当我运行代码时,它在建议的 argumentArray: 代码部分出现 EXC_BAD_ACCESS 错误并崩溃。
知道如何解决这个问题吗?
【问题讨论】:
-
也许我错了,但是如果您有多对多关系,则每个实体中都有一个属性引用另一个实体。过滤人员后,您可以从每个人的提及属性中检索关联的
municipalEntity项。 -
这几乎就是我想要做的。如果一个实体有一个属性,我可以运行一个谓词(就像在第一个循环中一样)。如果属性是关系,则同样的方法也应该适用。我缺少将实体关系中的对象与参考对象进行比较的语法。 "Object =%@" 可能是错误的方法。
-
明确一点:实体具有属性。属性可以是属性或关系。 vadian 表示属性,表示关系。
-
这也是我阅读 Vadian 评论的方式。
-
对,我混淆了术语,我的意思是关系
标签: swift core-data relationship nspredicate