gpt4 book ai didi

ios - "[NSBigMutableString substringWithRange:]: Range {0, 10} out of bounds; string length 9"撤消错误

转载 作者:可可西里 更新时间:2023-11-01 03:34:27 32 4
gpt4 key购买 nike

当我尝试在 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 错误而崩溃。

我假设即使 '%' 被替换为 @"",撤消管理器可能仍持有它,因此范围超出范围。

在将 % 替换为 @""后,我在 textDidChange 中尝试了 [searchBar.undoManager removeAllActions];,但它没有帮助。这是代码:

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

问题: 以前有人遇到过类似的问题吗?我如何处理撤消?

最佳答案

你应该改用这个委托(delegate)方法:

        - (BOOL)searchBar:(UISearchBar *)searchBar
shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text

如果 replacementText 等于“%”,则返回 NO。这将阻止用户首先使用它,因为它不会更新文本字段,这应该可以解决您遇到的撤消问题。

解决方案

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text isEqualToString:@"%"]) {
return NO;
}

return YES;
}

关于ios - "[NSBigMutableString substringWithRange:]: Range {0, 10} out of bounds; string length 9"撤消错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845277/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com