NSPredicate 返回子查询的数组
Posted
技术标签:
【中文标题】NSPredicate 返回子查询的数组【英文标题】:NSPredicate return subquerie'd array 【发布时间】:2018-07-13 20:54:57 【问题描述】:我的模特:
我只想获得一组带有城市的国家,其名称包含单词的给定部分。
我试过了:
let request : NSFetchRequest<Country> = Country.fetchRequest()
request.predicate = NSPredicate(format: "SUBQUERY(cities, $city, $city.name CONTAINS[cd] %@).@count > 0", givenWordPart)
let countries: [Country] = try! context.fetch(request)
但它会返回包含所有城市的国家/地区数组。
【问题讨论】:
也许题外话,但你也应该在城市和国家之间建立相反的关系,一对一的关系。 【参考方案1】:我认为您需要将结果收集到两个单独的集合中。使用与上述相同的谓词创建对 City 的获取请求,但作为普通查询而不是子查询。
这将返回与您的搜索条件匹配的城市实例数组,以获取您可以从城市数组中提取它们的国家/地区的选择
//fetch and predicate declaration...
let cities: [City] = try! context.fetch(request)
let countries = Set<Country>(cities.map($0.country ))
这假设您已经定义了从城市到国家的逆一对一关系
【讨论】:
国家会有一大堆重复的 + 速度慢 像我一样添加到集合时没有重复。与您的子查询相比,为什么这会这么慢?【参考方案2】:这是预期的行为。它查询Countries
并返回与谓词匹配的那些。返回的Countries
仍然包含所有城市,如果您只想要具有特定规则的城市,则必须为每个Country
收集cities
【讨论】:
以上是关于NSPredicate 返回子查询的数组的主要内容,如果未能解决你的问题,请参考以下文章