我添加搜索栏按照教程,但由于某种原因,搜索不会显示结果。
注意:我在第2行添加“self tableView”以避免错误。 也许这就是问题?或IF的问题?
git:https://github.com/dennis87/git_bookList
我认为问题在于此代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//cell create
if (nil == cell)
{
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
if (tableView == self.searchDisplayController.searchResultsTableView)
{
NSLog(@"Configuring cell to show search results");
Books *book = [[self searchResults]objectAtIndex:indexPath.row];
[[cell textLabel]setText:[book title]];
}
else
{
NSLog(@"Configuring cell to show normal data");
Books *book = [[self fetchResultsController]objectAtIndexPath:indexPath];
[[cell textLabel]setText:[book title]];
}
return cell;
}
我试过放NSlogs并得到这个NSLog永远不会打印,所以问题可能与IF有关吗? 我做错了什么?
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSLog(@"Previous Search Results were removed.");
[self.searchResults removeAllObjects];
for (Books *book in [self.fetchResultsController fetchedObjects])
{
if ([scope isEqualToString:@"All"] || [book.title isEqualToString:scope])
{
NSLog(@"entered");
NSComparisonResult result = [book.title compare:searchText
options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
NSLog(@"Adding book.title '%@' to searchResults as it begins with search text '%@'", book.title, searchText);
[self.searchResults addObject:book];
}
}
}
}
答案 0 :(得分:0)
有几个问题。
self.searchDisplayController
是nil
,因为您尚未在故事板中设置该出口。按住Ctrl键并从“Books Table View Controller”拖动到“Search Display Controller”并选择“searchDisplayController”插座。
您的filterContentForSearchText
方法会检查scope
的值,但这是nil
,因为您尚未在搜索栏中定义任何范围。
numberOfSectionsInTableView
应返回1
搜索结果表视图。
如果你解决了这些问题,你应该可以看到一些搜索结果。
备注:此行
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
对我来说似乎很可疑。即使搜索结果表视图,您也要求self.tableView
将单元格出列。我在SO上的某个地方已经看到了将原型单元格与搜索显示一起使用的方法,这可能是正确的,但我有一点疑问。
如果它是正确的,那么您不需要以下if (nil == cell) { ... }
,因为该方法总是返回原型中的单元格。
您还应注意,在if (nil == cell) { ... }
块内,您将值分配给局部变量cell
,而不是外部范围中的变量。