UIsearchBar显示结果,但当我按下不存在的东西时,应用程序会粉碎

时间:2012-11-20 10:46:05

标签: xcode core-data storyboard uisearchbar

我尝试了解一些教程会发生什么,但不幸的是我找不到答案。 我认为问题可能是我没有 IF 以防我在搜索结果中获得nil。

错误是: 'NSRangeException',原因:' * - [__ NSArrayM objectAtIndex:]:索引0超出空数组的界限'

我使用那种方法:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    //removes previos search result
    [[self searchResults]removeAllObjects];

    for (Books *book in [self.fetchResultsController fetchedObjects])
    {
            if([self searchResults] != nil)
            {
                NSComparisonResult result = [book.title compare:searchText
                                                   options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
                                                     range:NSMakeRange(0, [searchText length])];
                if (result == NSOrderedSame )
                {
                        [self.searchResults addObject:book];
                }
            }
        }
}

也可以在git找到我的完整项目: https://github.com/dennis87/git_bookList

修改 当我试着像这样一个

if([scope isEqualToString:@“All”] || [book.title isEqualToString:scope])

应用程序粉碎而不让我按任何东西..

2 个答案:

答案 0 :(得分:0)

您可能想要在删除所有对象之前检查数组是否包含对象..

if(dataSourceArray){  //use your datasource array instead
    [[self searchResults]removeAllObjects];
}

答案 1 :(得分:0)

问题在于numberOfSectionsInTableView始终会为搜索结果表返回1,即使没有搜索结果也是如此。崩溃发生在titleForHeaderInSection

return [[[self searchResults] objectAtIndex:section] author];

因为从空数组访问索引0处的对象。

因此,如果搜索结果数组为空,则更改numberOfSectionsInTableView以返回0,或者更改titleForHeaderInSection以返回搜索结果表中不同的内容。