0

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

错误是: 'NSRangeException',原因:' * -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'

我使用这种方法:

- (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

编辑: 当我尝试 put if like this

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

应用程序迷恋不让我按任何东西..

4

2 回答 2

0

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

if(dataSourceArray){  //use your datasource array instead
    [[self searchResults]removeAllObjects];
}
于 2012-11-20T11:03:32.907 回答
0

问题是 numberOfSectionsInTableView总是返回1搜索结果表,即使没有搜索结果。崩溃发生在titleForHeaderInSection

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

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

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

于 2012-11-20T18:51:08.850 回答