【问题标题】:NSPredicate(Swift) : SUBQUERY not workingNSPredicate(Swift):子查询不起作用
【发布时间】:2017-03-09 11:04:33
【问题描述】:

我有两个模型如下:

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!
}

以及在我的视图控制器中定义的主题数组:

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)

如果搜索字符串为 Health,则结果如下:

如果 searchedText 存在于 subTopic[0] 中,那么我想从结果 subTopic 数组中删除 subTopic[1],subTopic[2],subTopic[3],并且只检索 subTopic[0]。

【问题讨论】:

  • 2 和 3 的图片链接无效。
  • 实际上并不只是一个数组。
  • 明白了,现在我明白你的问题了。

标签: ios arrays swift core-data nspredicate


【解决方案1】:

您正在过滤顶级 Topic 数组,您的代码中的任何内容都不会触及 subTopics 子数组。谓词根据子主题决定是否将特定的Topic(顶级对象)添加到过滤后的数组中。但是,一旦某个主题与条件匹配(即,至少有一个具有搜索词的子主题),就会添加Topic

您似乎想修改TopicsubTopics 数组以包含更少的对象。为此,您必须遍历每个 Topic 并修改它的 subTopics 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多