我尝试了解一些教程会发生什么,但不幸的是我找不到答案。 我认为问题可能是我没有 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])
应用程序粉碎而不让我按任何东西..
答案 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
以返回搜索结果表中不同的内容。