2015-11-14 4 views
8

Ich verwende einen UITableViewController mit einer UISearchBar. Alles scheint gut zu funktionieren, außer dass ich eine seltsame Warnung in der textDidChange Methode bekomme, die ich noch nie zuvor gesehen habe.UISearchBar textDidChange Erstellungsfehler: Es sind sichtbare Ansichten übrig, nachdem alle wiederverwendet wurden: {(null) = (null); }

Dies ist mein Code:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 

    [self.searchResults removeAllObjects]; 
    if([searchText isEqualToString:@""]||searchText==nil){ 
     [self.tableView reloadData]; 
     return; 
    } 

    for(NSArray *monsterArray in self.monsterArray) { 
     NSString *name = monsterArray[0]; 
     NSRange r = [[name lowercaseString] rangeOfString:[searchText lowercaseString]]; 
     if(r.location != NSNotFound) { 
      if(r.location==0) { 
       [self.searchResults addObject:monsterArray]; 
      } 
     } 
    } 

    [self.tableView reloadData]; 
} 

von durch das Programm treten, ich habe festgestellt, dass die Warnung kurz vor dem Ende der textDidChange auftritt. Wie ich im Titel erwähnte, ist die Warnung dies:

There are visible views left after reusing them all: { (null) = (null); }

Weiß jemand, warum dies geschieht und wie es zu lösen?

+0

Ich habe das gleiche Problem in einem ähnlichen Textfeld Delegate-Methode: 'func textField (textField: UITextField, shouldChangeCharactersInRange Bereich: NSRange, ErsetzungString string: String) -> Bool'. Da es im Internet keine Infos dazu gibt, beschreibt dieses xkcd commic genau, wie ich mich fühle: http://static.fjcdn.com/pictures/What+did+you+see_a484fb_4909175.jpg – Losiowaty

Antwort

10

Ich hatte ein ähnliches Problem mit einer Abschnitt Header-Ansicht mit einem benutzerdefinierten UITextField. Ich habe die Warnung losgelöst, indem ich resignFirstResponder auf dem Textfeld vor dem Neuladen der Tabellenansichtsdaten aufgerufen und becomeFirstResponder nach dem Neuladen aufgerufen hat. Etwas wie:

+0

Das verdient mehr Stimmen, das hat Ich habe mich wochenlang geärgert und bis jetzt konnte ich nur Leute finden, die sagten, du könntest nichts dagegen tun! – Kris

+0

Für mich fügt das Hinzufügen von Tastaturen verstecken und nicht wieder auf. Wie wird der firstResponder überhaupt nicht ausgelöst ...:/ – Fengson

2

Während die andere Antwort den Fehler löschte, der in die Konsole gesetzt wurde, hatte sie auch einige unbeabsichtigte Folgen. Hauptsächlich ruft resignFirstResponder und dannFirstResponder auf diese Weise den Zustand der Tastatur zurück. Wenn Sie also einen Buchstaben eingeben, wird die Tastatur von Numerisch auf Alpha zurückgesetzt. Dies wird ärgerlich, wenn Sie versuchen, eine Buchstabenfolge einzugeben.

In meinem Fall fand ich die There are visible views left after reusing them all: { (null) = (null); } Fehler wurde nur protokolliert, wenn ich meine UISearchBar auf den Abschnitt Header der TableView gesetzt hatte. Ich tat dies, um die Suchleiste oben auf einem UITableViewController zu halten.

Stattdessen refaktoriert, um einen UIViewController zu verwenden, legte die UISearchBar an der Spitze und die UITableView darunter, das scheint das Problem ordnungsgemäß behoben zu haben.

+0

Die selbe Lösung half in meinem Fall. Die Idee, die Sequenz von 'resignFirstResponder'' reloadData' 'fistFirstResponder' zu nennen, erschien mir zu hackig. – Michael

Verwandte Themen