"[NSBigMutableString substringWithRange:]: Rango {0, 10} fuera de los límites; error de longitud de cadena de 9 "con Deshacer

Mi aplicación se bloquea cuando intento deshacerUISearchBar. En mi aplicación tengo un código para evitar ingresar un signo '%' en la barra de búsqueda y para hacer esto reemplaza un% a @ "" en el método textDidChange como se muestra a continuación:

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

Entonces, si escribo el texto "abc% xyz", el texto final visible en la barra de búsqueda sería 'abcxyz'. No, cuando hago clic en Deshacer, veo que 'xyz' se borra y aún veo 'abc' en la barra de búsqueda en lugar de borrar 'abcxyz' de una sola vez.

Ahora, si hago clic en Deshacer nuevamente para borrar 'abc', mi aplicación falla[NSBigMutableString substringWithRange:]: Range out of bounds error.

Supongo que a pesar de que '%' sea reemplazado por @ "", el administrador de deshacer aún podría estar reteniéndolo y, por lo tanto, el rango está fuera de límites.

Lo intenté[searchBar.undoManager removeAllActions]; entextDidChange después de reemplazar% con @ "", pero no ayudó. Aquí está el código:

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

Pregunta: ¿Alguien se enfrentó a un problema similar antes? ¿Cómo manejo el deshacer?

Respuestas a la pregunta(1)

Su respuesta a la pregunta