2016-08-01 59 views
0

自定義對象的我有兩個類象下面這樣:搜索字符串中的NSArray使用NSPredicate

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 {...} 

現在,我有市陣列像這樣在我的ViewController聲明:

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) 

這是給所有區域對象城市對象。

enter image description here

在此先感謝。

回答

1

有無嘗試這樣

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

您好,感謝您的回答,但它正在崩潰的應用程序:***由於未捕獲的異常**'NSInvalidArgumentException',原因:'無法解析格式字符串「SELF areas.address CONTAINS %@「' –

+0

檢查我的編輯它使用了'ANY'編輯的 –

+0

。如果城市匹配中的任何區域返回整個城市對象,則過濾城市對象並返回。 –

0

試試這個兄弟,

設預解碼= NSPredicate(格式爲: 「自包含[C]%@」,搜索字符串) 讓filteredCities = self.area。 filteredArrayUsingPredicate(pred)