【问题标题】:Searching string in NSArray of custom object using NSPredicate使用 NSPredicate 在自定义对象的 NSArray 中搜索字符串
【发布时间】:2016-08-01 10:49:42
【问题描述】:

我有两个类如下:

class City : NSObject{
    var header:String? = nil
    var areas:NSMutableArray? = nil  //Contain array of Area

    //Return array of City objects
    class func generate(cityCount:NSInteger) -> NSMutableArray{...} 
}

class Area : NSObject{
    var title:String? = nil
    var address:String? = nil
}
    //Return array of Area objects
    class func generate(areaCount:NSInteger) -> NSMutableArray {...} 

现在,我在视图控制器中声明了这样的城市数组:

var cities = City.generate(200)

当我使用 NSPredicate 在里面搜索标题​​时,它工作得很好

let pred = NSPredicate(format: "SELF.header CONTAINS %@",searchString)
let filteredCities = self.cities.filteredArrayUsingPredicate(pred)

但是当我搜索cities->areas->address(我想搜索地址)。它不工作。它总是返回 0 个对象。这是我正在尝试的:

let pred = NSPredicate(format: "SELF.areas.address CONTAINS %@",searchString) //name
let filteredCities = (self.cities as NSArray).filteredArrayUsingPredicate(pred)

编辑

我只需要包含匹配地址的区域对象。 我试过了:

let pred = NSPredicate(format: "ANY areas.address CONTAINS %@",searchString)

这是给 City 对象和所有区域对象。

提前致谢。

【问题讨论】:

    标签: ios swift nsarray nspredicate


    【解决方案1】:

    试试这样

    let pred = NSPredicate(format: "ANY areas.address CONTAINS %@",searchString)
    

    【讨论】:

    • 您好,感谢您的回答,但它正在使应用程序崩溃:*** 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'无法解析格式字符串“SELF 区域。地址包含 %@"'
    • 已编辑。它正在过滤城市对象并返回如果城市匹配中的任何区域然后返回整个城市对象。
    • 当然它会返回城市对象,因为您正在过滤城市数组。
    • 我同意,但我也想过滤地址。如果地址不包含在区域中,那么我不想要区域对象。
    【解决方案2】:

    试试这个兄弟,

    let pred = NSPredicate(格式: "SELF contains[c] %@",searchString) 让filteredCities = self.area.filteredArrayUsingPredicate(pred)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多