“[NSBigMutableString substringWithRange:]: intervalo {0, 10} fora dos limites; erro de 9 "de comprimento de cadeia com Desfazer

Meu aplicativo falha quando tento desfazer a açãoUISearchBar. No meu aplicativo, tenho um código para impedir a inserção de um sinal '%' na barra de pesquisa e, para isso, substitui um% para @ "" no método textDidChange, conforme abaixo:

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

Portanto, se eu digitar o texto "abc% xyz", o texto final visível na barra de pesquisa será 'abcxyz'. Não, quando clico em desfazer, vejo 'xyz' sendo limpo e ainda vejo 'abc' na barra de pesquisa, em vez de limpar 'abcxyz' de uma só vez.

Agora, se eu clicar em desfazer novamente para limpar 'abc', meu aplicativo trava com[NSBigMutableString substringWithRange:]: Range out of bounds erro.

Estou assumindo que, embora '%' seja substituído por @ "", o gerente de desfazer ainda pode estar com ele e, portanto, o intervalo está fora dos limites.

eu tentei[searchBar.undoManager removeAllActions]; notextDidChange depois de substituir% por @ "", mas não ajudou. Aqui está o código:

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

Pergunta, questão: Alguém já enfrentou problemas semelhantes antes? Como eu manejo a desfazer?

questionAnswers(1)

yourAnswerToTheQuestion