2016-08-01 27 views
0

Ich habe zwei Klassen wie folgt:Suche Zeichenfolge in NSArray von benutzerdefinierten Objekt mit 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{...} 
} 

und

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

Nun, ich Array von Stadt haben wie dies in meinem Viewcontroller erklärte:

var cities = City.generate(200) 

und wenn ich die Kopfzeile innerhalb mit NSPredicate suchen, funktioniert es perfekt

Aber wenn ich suche cities->areas->address (Ich möchte Adresse suchen). Es funktioniert nicht. Es gibt immer 0 Objekt zurück. Hier ist, was ich versuche:

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

EDIT

Ich brauche nur den Bereich Objekt, das passende Adresse enthalten. Ich habe versucht:

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

Dies ist die Stadt Objekt mit allen Bereichen Objekt gibt.

enter image description here

Vielen Dank im Voraus.

Antwort

1

Haben Sie versuchen, wie dieser

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

Hallo, Vielen Dank für Ihre Antwort, aber es stürzt die App: *** Beenden App aufgrund nicht abgefangener Ausnahme ** 'NSInvalidArgumentException', Grund: 'Kann nicht die Formatzeichenfolge parsen "SELF Bereiche.Adresse CONTAINS % @ "'** –

+0

Überprüfen Sie meine Ed es habe ich 'ANY' verwendet –

+0

Edited. Es filtert das Stadtobjekt und kehrt zurück, wenn irgendein Gebiet in der Stadt das gesamte Stadtobjekt zurückgibt. –

0

dieses bro Versuchen,

let pred = NSPredicate (Format: "SELF enthält [c]% @", searchString-) lassen filteredCities = self.area. filteredArrayUsingPredicate (pred)