嵌套获取请求

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的反向关系叫municipalitiesselectedPeople的直辖市就是selectedPeople.municipalities.

如果你真的想执行第二个获取请求,谓词格式将是 peopleInMunicipality CONTAINS %@.

因为我无法post发表评论。您可以像这样在 MunicipalEntity 上尝试 SubQuery:

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(peopleInMunicipality, $person, $person.surname == %@).@count > 0", @"Smith"];

对市政实体使用此谓词