2017-03-09 66 views
0

我有一个像下面两型:NSPredicate(SWIFT):SUBQUERY不工作

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 %@)[email protected] > 0 OR SUBQUERY(subTopics, $SubTopics, $SubTopics.subTopicName CONTAINS %@)[email protected] > 0",searchBar.text!,searchBar.text!,searchBar.text!) 
let filteredArray = (self.rightsDataArray as NSArray).filtered(using: pred) 

这里是搜索字符串为“健康”的结果:

如果searchedText存在于子主题[0],然后我想删除子标题[1],副题[2],副题从所得副题阵列[3],并且只提取子标题[0]。

+0

2和3的图像链接不起作用。 –

+0

实际上不是图像只是一个数组。 –

+0

明白了,现在我明白你的问题了。 –

回答

1

您正在筛选顶层Topic数组,并且代码中的任何内容都不会触及subTopics子数组。谓词决定是否根据其子类添加特定Topic(顶级对象)到已过滤的数组。但是,一旦Topic符合条件(即至少有一个具有搜索条件的子主题),则会添加Topic

看起来好像你想修改TopicsubTopics数组来包含更少的对象。为此,您必须遍历每个Topic并修改它的subTopics属性。