filteredArrayUsingPredicate数组未保留

时间:2012-04-12 18:07:33

标签: iphone core-data nspredicate uisearchdisplaycontroller

我有一个核心数据库,每一行都显示在表格中。

我有一个搜索控制器,可让用户按名字或姓氏进行搜索。

当我从'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
}
}

2 个答案:

答案 0 :(得分:0)

我发现问题是搜索控制器在我使用数组中的数据之前被解雇了。奇怪但改变我的代码的顺序

答案 1 :(得分:-1)

此代码snippit缺乏重要信息。从我看到的,听起来你没有正确计算tableView:numberOfRowsInSection:。验证它是否为您的给定方案提供了正确的行数。