isEqualToString:给出超出范围的异常

时间:2016-07-04 07:31:39

标签: ios objective-c iphone xcode uisearchbar

今天,我收到isEqualToString方法的随机崩溃,该方法与UISearchBar的文字属性一起使用。据Crashlytics报道了这起事故。

以下是代码段。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if( [searchBar.text isEqualToString:@" "] )
    {
        [searchBar setText:@""];
    }
    if ( searchBar.text.length >= 2 )
    {
        [self performSelectorInBackground:@selector(searchForKeyword:) withObject:searchBar.text];
    }
}

-(void)searchForKeyword:(NSString *)keyword
{
    if ([keyword isEqualToString:searchBar.text])
    {
        //Search for keyword
    }
}

崩溃说

Fatal Exception: `NSRangeException`
*** -[NSBigMutableString _newBigSubstringWithRange:wantsMutable:zone:]: Range {0, 4} out of bounds; string length 3

我已经尝试调试导致崩溃的代码行,但没有成功。它只是随机崩溃。 提前致谢

1 个答案:

答案 0 :(得分:1)

错误是由于:您在

中设置搜索栏文本
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText   

您应该使用以下方法而不是您使用的方法。

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text NS_AVAILABLE_IOS(3_0); // called before text changes