“[NSBigMutableString substringWithRange:]: Bereich {0, 10} außerhalb der Grenzen; Stringlänge 9 ”Fehler mit Undo

Meine App stürzt ab, wenn ich versuche, den Vorgang rückgängig zu machenUISearchBar. In meiner App habe ich Code, um die Eingabe eines '%'-Zeichens in der Suchleiste zu verhindern. Dazu ersetzt er in der textDidChange-Methode ein% in @ "" wie folgt:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
   self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""];
}

Wenn ich also den Text "abc% xyz" eingebe, ist der endgültige Text in der Suchleiste "abcxyz". Nein, wenn ich auf "Rückgängig" klicke, wird "xyz" gelöscht und in der Suchleiste wird immer noch "abc" angezeigt, anstatt "abcxyz" auf einmal zu löschen.

Wenn ich jetzt erneut auf "Rückgängig" klicke, um "abc" zu löschen, stürzt meine App ab[NSBigMutableString substringWithRange:]: Range out of bounds Error.

Ich gehe davon aus, dass '%' zwar durch @ "" ersetzt wird, der Rückgängig-Manager es aber möglicherweise noch festhält und der Bereich daher außerhalb der Grenzen liegt.

Ich habe es versucht[searchBar.undoManager removeAllActions]; imtextDidChange nachdem ich% durch @ "" ersetzt habe, aber es hat nicht geholfen. Hier ist der Code:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
    {
       self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""];
      [searchBar.undoManager removeAllActions];
    }

Frage: Hat jemand vor einem ähnlichen Problem gestanden? Wie gehe ich mit dem Rückgängigmachen um?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage