我有两个模型如下:

class Topic : NSObject {

    var subTopics : [SubTopic]!
    var topicId : Int!
    var topicName : String!


class SubTopic : NSObject {

    var subTopicDesc : String!
    var subTopicDescText : String!
    var subTopicId : Int!
    var subTopicName : String!
}

以及在我的viewcontroller中定义的主题数组:
var rightsDataArray: [Topic] = []

以下是我的搜索逻辑:
let pred = NSPredicate(format: "topicName CONTAINS %@ OR SUBQUERY(subTopics, $SubTopics, $SubTopics.subTopicDescText CONTAINS %@).@count > 0 OR SUBQUERY(subTopics, $SubTopics, $SubTopics.subTopicName CONTAINS %@).@count > 0",searchBar.text!,searchBar.text!,searchBar.text!)
let filteredArray =  (self.rightsDataArray as NSArray).filtered(using: pred)

如果搜索字符串为“运行状况”,则返回以下结果:
ios - NSPredicate(Swift):子查询不起作用-LMLPHP
如果searchedText存在于子主题[0]中,则我要从结果的子主题数组中删除子主题[1]、子主题[2]、子主题[3],并且只检索子主题[0]。

最佳答案

您正在筛选顶级Topic数组,代码中的任何内容都不会触及子主题数组。谓词根据子主题决定是否向筛选数组添加特定的Topic(顶级对象)。但一旦一个主题符合条件(即至少有一个子主题包含搜索词),就会添加Topic
似乎要修改TopicsubTopics数组以包含较少的对象。为此,您必须遍历每个Topic并修改它的subTopics属性。

关于ios - NSPredicate(Swift):子查询不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42693684/

10-12 06:03