我有一个核心数据库,每一行都显示在表格中。
我有一个搜索控制器,可让用户按名字或姓氏进行搜索。
当我从'filteredArrayUsingPredicate'获得结果时,我重新加载搜索控制器表,一切正常。该表显示了过滤结果。
在选择结果时,结果数组为空,随后由于[array atIndex:index path.row]超出范围而崩溃。阵列是空的,让我觉得它已被释放。
此代码在另一个视图上完美运行。我曾经尝试过重新编写和清理,构建并且仍在发生 - 任何想法?
以下是我的代码
@property(nonatomic,retain)NSArray * cachedSearchResults;
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"first_name contains[cd] %@ || last_name contains[cd] %@",searchText, searchText];
self.cachedSearchResults = [[self.cachedResults filteredArrayUsingPredicate:predicate]retain];
;
[searchController.searchResultsTableView reloadData];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
PupilManagedObject* selected = nil;
if(tableView == table){
selected = [cachedResults objectAtIndex:indexPath.row];
}else{
selected = [self.cachedSearchResults objectAtIndex:indexPath.row]; //array is empty at this point
}
}
答案 0 :(得分:0)
我发现问题是搜索控制器在我使用数组中的数据之前被解雇了。奇怪但改变我的代码的顺序
答案 1 :(得分:-1)
此代码snippit缺乏重要信息。从我看到的,听起来你没有正确计算tableView:numberOfRowsInSection:。验证它是否为您的给定方案提供了正确的行数。