首页 > 解决方案 > 使用谓词过滤嵌套的 NSSet

问题描述

我有一个具有一对多关系的 coredata 模型,我的目标是根据子元素(Account<->>Contact)过滤父数组。

Account{

 @NSManaged public var recent_contact_id: String?

 @NSManaged public var contacts: NSSet? //Many contact in one account

}

Contact {

  NSManaged public var contact_id: String?

  NSManaged public var name: String?
}

在将联系人保存到 coredata 时,我在 Account 中保留了一个引用,其中最后更新的contact_id 为recent_contact_id。最后在获取后我有一个帐户数组,我的目标是根据从帐户级别作为recent_contact_id 传递的contact_id 参数过滤帐户。部分完成的代码如下。

   // Im stuck passing the recent_contact_id to the predicate, if i hardcode the value it'll give me the right result. but i want to pass something like $0.recent_contact_id

    let namePredicate = NSPredicate(format: "SUBQUERY(contacts, $x, $x.contact_id == %@).@count > 0", ??) //how tp pass recent_contact_id ??
    let filteredArray = accountsArray.filter { namePredicate.evaluate(with: $0) };

标签: iosswiftswift5

解决方案


推荐阅读