2016-09-16 6 views
0

Ich habe eine UITableViewController und ich habe eine Suchleiste als Header-Ansicht hinzugefügt. Ich versuche, die Daten der Tabellenansicht neu zu laden, wenn sich der Text in der Suchleiste ändert, aber nicht funktioniert.Suchergebnisse in UITableView anzeigen

Hier ist meine textDidChange Methode. Für Kontext ist jsonArray[[String: AnyObject]] und wird von einem anderen Ansichtscontroller übergeben. Das searchResults-Array wird dann auf jsonArray in viewDidLoad() festgelegt und die Tabellenansicht verwendet searchResults als Datenquelle.

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 
     if searchText.characters.count == 0 { 
      searchResults?.removeAll() 
      searchResults = jsonArray! 
     } else { 
      searchResults?.removeAll() 
      for market in jsonArray! { 
       let titleRange = market["name"]?.range(of: searchText, options: .caseInsensitive) 

       var address = String() 
       var city = String() 
       var state = String() 
       var zip = Int() 

       if let address1 = market["address1"] as? String { 
        address = address1 
       } 

       if let city1 = market["city"] as? String { 
        city = city1 
       } 

       if let state1 = market["state"] as? String { 
        state = state1 
       } 

       if let zip1 = market["zip"] as? Int { 
        zip = zip1 
       } 

       let zipCode = String(describing: zip) 
       let addressString = String("\(address) " + "\(city), " + "\(state) " + "\(zipCode)") 
       let addressRange = addressString?.range(of: searchText, options: .caseInsensitive) 

       if titleRange != nil { 
        searchResults?.append(market) 
       } else if addressRange != nil { 
        searchResults?.append(market) 
       } 
      } 
     } 

     tableView.reloadData() 
    } 

Ich habe diesen Druck Erklärung am Ende der else-Anweisung nach der addierte for-Schleife und es zeigt, dass das Array alle Objekte enthält es ursprünglich enthalten, so dass es meine Bereiche sieht aus wie nicht richtig funktioniert .

print("search array: \(searchResults?.count)") 

Antwort

-1

Sie müssen zu Ihrem Suchergebnis nicht angerufen? .removeAll() Funktion stattdessen verwenden Sie es

searchResults = NSMutableArray.init() 

search Nicht verwenden? .append (Markt) es stattdessen

searchResults.addObject(market) 
+0

Ich verwende Swift-Arrays, nicht NSArray. – raginggoat

+0

ok srrry darüber –

0

Ich habe das behoben, indem ich NSRange anstelle von Range in Swift verwendete.

let titleNSRange: NSRange = (market["name"]?.range(of: searchText, options: .caseInsensitive))! 
let addressNSRange: NSRange = (addressNSString.range(of: searchText, options: .caseInsensitive)) 

if titleNSRange.location != NSNotFound || addressNSRange.location != NSNotFound { 
        searchResults?.append(market) 
       } 
Verwandte Themen