2012-04-12 2 views
0

私はコアデータデータベースを持ち、各行はテーブルに表示されます。filteredArrayUsingPredicate配列が保持されない

私はユーザーが姓または名で検索できるようにする検索コントローラを持っています。

「filteredArrayUsingPredicate」から結果が得られたら、検索コントローラテーブルをリロードしても問題ありません。表には、フィルタリングされた結果が表示されます。

結果を選択するとき、結果配列は空であり、[配列atIndex:index path.row]が範囲外であるためにクラッシュします。配列は空で、私はそれが解放されたと思うようにします。

このコードは完全に別のビューで動作します。私は書き直しを試み、きれいにしてビルドしています。以下は

私のコードは

@property(アトミック、保持)に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

tableViewで配列を記録する:numberOfRowsInSectionとcellForRowAtIndexPathは、正しく配置された配列 – Dan

答えて

0

アレイ内のデータを使用する前に、検索コントローラが切断されたという問題が見つかりました。奇妙だが、私のコードの順序を変更する

-1

このコードスニピットには重要な情報がありません。私が見ていることから、tableView:numberOfRowsInSection:を正しく計算していないように思えます。指定されたシナリオで正しい行数を提供していることを確認します。

+0

を示しています - ありがとうございます。 tableViewで配列をログに記録する:numberOfRowsInSection - cellForRowAtIndexPathは、入力された配列を示します。 – Dan

+0

tableView:didSelectRowAtIndexPath:で配列が実際に空ですか、それともdeallocですか?私は変数 "テーブル"がどこから来るのか、なぜそれらを切り替える必要があるのか​​混乱しています。それがあなたが期待しているものであることを確認するために、その関数に入っているインデックスパスをログに記録しましたか? –

+0

ご回答いただきありがとうございます。配列を出力するときは、nilではないので空です。比較は、デリゲートが検索コントローラまたはテーブルから呼び出されたかどうかをチェックすることです。インデックスのパスは正しいですが、何らかの理由でアレイが空になっているという問題があります。同じアプリで全く同じコードを少なくとも5回は問題なく使用しました。それは非常に奇妙です。 – Dan

関連する問題