2017-04-16 1 views
0

Ich versuche, meine Suchleiste zu filtern, aber ich habe Probleme. Ich folgte ein Tutorial und kopiert und diesen Code eingefügt, aber ich erhalte eine Fehlermeldung von der LinieArt des Ausdrucks ist mehrdeutig ohne mehr Kontext -. Filter

return mod.profileNameLabel.lowercased().contains(text.lowercased()) 
„Art des Ausdrucks, ohne mehr Kontext nicht eindeutig ist“

ich swift 3 und Xcode bin mit 8. Ich habe meinen Code eingefügt unten:.

var intialProfiles = NSMutablearray() 

var profiles = NSMutablearray() 

func filterTableView(ind:Int,text:String) { 
     switch ind { 

     case selectedScope.Name.rawValue: 

      //fix of not searching when backspacing 
      profiles = intialProfiles.filter(using: { (mod) -> Bool in 
      return mod.profileNameLabel.lowered().contains(text.lowercased()) 
      }) 
      self.searchTableView.reloadData() 
+0

'NSMutableArray' in Swift ist schrecklich. Verwende natives Swift 'Array'. – vadian

Antwort

0

NSMutableArray.filter einen NSPredicate als Argument akzeptiert, nicht den (Profile) -> Bool Verschlusstyp, den Sie in

vorbei sind empfehle ich Ihnen eine schnelle Array zu verwenden, anstatt NSMutableArray.

Ich nehme an, das Array enthält Profile Objekte. Wenn dies nicht der Fall ist, ersetzen Sie einfach das Wort Profile im folgenden Code durch den Typ, den es enthält.

var intialProfiles = [Profile]() 

var profiles = [Profile]() 

func filterTableView(ind:Int,text:String) { 
     switch ind { 

     case selectedScope.Name.rawValue: 

      //fix of not searching when backspacing 
      profiles = intialProfiles.filter { $0.profileNameLabel.lowered().contains(text.lowercased()) } 
      self.searchTableView.reloadData() 

Wenn Sie darauf bestehen NSMutableArray über die Verwendung, hier ist das Prädikat Sie verwenden müssen:

initialProfiles.filter(using: NSPredicate(format: 
    "profileNameLabel contains[c] %@", "Hello")) 
+0

danke für die Antwort. Ich habe den Prädikatcode ausprobiert, den Sie empfohlen haben, und er hat den Fehler entfernt, aber wenn ich ihn ausgeführt habe, funktioniert der Code nicht so, wie er annimmt, denn searchBar filtert das Array nicht. Weißt du, was könnte das Problem sein, warum es nicht so läuft, wie es sein sollte? Auch habe ich vergessen zu erwähnen, dass mein Array besteht aus Daten aus Firebase abgerufen daher der Grund, warum ich ein NSMutableArray verwenden. –

+0

Sie können einfach ein 'NSMutableArray' in ein schnelles Array konvertieren. Ich kann nicht den Grund finden, warum es nicht funktioniert, nur indem ich den Code sehe, den du zur Verfügung gestellt hast. Ich brauche mehr von deinem Code, um das herauszufinden. Vielleicht sollten Sie die Methode überprüfen, die 'filterTableView' aufruft. Die Datenquellenmethoden der Tabellenansicht können auch den Fehler enthalten. Überprüfen Sie auch, ob das Filter-Bit überhaupt ausgeführt wird. @ j.iese – Sweeper

+0

ok, also habe ich das Filterbit doppelt überprüft und es wird überhaupt nicht ausgeführt. Ich gebe eine Druckanweisung ein und nur dieser Druck wird ausgeführt. Der Code wird als func filterTableView folgt (ind: Int, text: String) { Schalter ind { Fall selectedScope.Name.rawValue: profiles.filter (unter Verwendung von: NSPredicate (Format: „profileNameLabel enthält [c]% @“, "Hallo")) self.searchTableView.reloadData() print ("Suche") –

Verwandte Themen