嵌套获取请求
Nesting fetch requests
在我的项目中,我有两个实体: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 错误。
知道我该如何解决这个问题吗?
瓦迪安是对的。您不需要第二个获取请求。如果peopleInMunicipality
的反向关系叫municipalities
,selectedPeople
的直辖市就是selectedPeople.municipalities
.
如果你真的想执行第二个获取请求,谓词格式将是 peopleInMunicipality CONTAINS %@
.
因为我无法post发表评论。您可以像这样在 MunicipalEntity 上尝试 SubQuery:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(peopleInMunicipality, $person, $person.surname == %@).@count > 0", @"Smith"];
对市政实体使用此谓词
在我的项目中,我有两个实体: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 错误。
知道我该如何解决这个问题吗?
瓦迪安是对的。您不需要第二个获取请求。如果peopleInMunicipality
的反向关系叫municipalities
,selectedPeople
的直辖市就是selectedPeople.municipalities
.
如果你真的想执行第二个获取请求,谓词格式将是 peopleInMunicipality CONTAINS %@
.
因为我无法post发表评论。您可以像这样在 MunicipalEntity 上尝试 SubQuery:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(peopleInMunicipality, $person, $person.surname == %@).@count > 0", @"Smith"];
对市政实体使用此谓词