如何断言核心数据中的关系?

时间:2018-12-24 13:32:22

标签: ios swift core-data

我有一个带有下一个表的数据库:

Car
Sector

Car中,我有一对多关系,carHasSectors,在Sector中,我有sectorInCar

现在,我想编写一个谓词,它将在Sector表中但通过Car表进行搜索。为此,我这样做:

let p3 = NSPredicate(format: "SELF.carHasSectors.sectorName CONTAINS[c] %@ ", searchText)

其中SELFCar

,但找不到任何结果。 我做错了什么?我不能在核心数据中使用点符号转到Sector吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,则需要具有特定名称的扇区的汽车。我认为您应该在NSPredicate(format: "sectorName CONTAINS[c] %@ ", searchText)之类的Sector表上执行请求,然后将要进入的扇区列表映射到汽车列表中。

答案 1 :(得分:0)

两个选项:

  1. 获取对象而无需从关系中获取(car是当前的Car

    let result = (car.carHasSectors.allObjects as! [Sector])
                                   .filter{$0.sectorName.range(of: searchText, options: .caseInsensitive) != nil}
    
  2. 使用谓词获取 Sector

    NSPredicate(format: "sectorInCar.name == %@ AND sectorName CONTAINS[c] %@ ", carName, searchText)