«[NSBigMutableString substringWithRange:]: диапазон {0, 10} вне границ; Ошибка длины строки 9 "с отменой

Мое приложение падает, когда я пытаюсь отменитьUISearchBar, В моем приложении есть код, запрещающий ввод знака «%» на панели поиска, и для этого он заменяет% на @ »в методе textDidChange, как показано ниже:

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

Поэтому, если я наберу текст «abc% xyz», конечный текст, видимый в строке поиска, будет «abcxyz». Нет, когда я нажимаю «Отменить», я вижу, что «xyz» очищается, и я все еще вижу «abc» в строке поиска вместо того, чтобы очищать «abcxyz» сразу.

Теперь, если я снова нажму «Отменить», чтобы очистить «abc», мое приложение вылетает с[NSBigMutableString substringWithRange:]: Range out of bounds ошибка.

Я предполагаю, что хотя «%» заменяется на «@», менеджер по отмене может все еще удерживать его, и, следовательно, диапазон выходит за пределы.

Я старался[searchBar.undoManager removeAllActions]; вtextDidChange после того, как я заменил% на @ "", но это не помогло. Вот код:

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

Вопрос: Кто-нибудь сталкивался с подобной проблемой раньше? Как мне справиться с отменой?

Ответы на вопрос(1)

Ваш ответ на вопрос