2012-04-12 65 views
0

我有一個核心數據數據庫,每行顯示在一個表中。filteredArrayUsingPredicate數組不保留

我有一個搜索控制器,使用戶能夠按姓或名進行搜索。

當我從'filteredArrayUsingPredicate'獲得結果時,我重新加載搜索控制器表並且所有工作正常。該表顯示了過濾結果。

當涉及到選擇一個結果時,結果數組爲空,隨後由於[數組atIndex:index path.row]超出範圍而崩潰。該陣列是空的,使我認爲它已被釋放。

此代碼在另一個視圖上完美工作。我已經嘗試過重新編寫和清理,並且仍然在發生 - 任何想法?

下面是我的代碼

@屬性(非原子,保留)的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 2012-04-12 18:36:01

回答

0

我發現問題是搜索控制器在我使用數組中的數據之前被解僱。奇數,但改變我的代碼的順序工作

-1

此代碼snippit缺少重要信息。從我看到的,這聽起來像你沒有正確計算tableView:numberOfRowsInSection :.驗證它是否爲給定方案提供了正確的行數。

+0

謝謝 - 它是。在tableView中記錄數組:numberOfRowsInSection - cellForRowAtIndexPath顯示一個已填充數組。它似乎被釋放之間和選擇 – Dan 2012-04-12 18:32:21

+0

該數組實際上是在tableView:didSelectRowAtIndexPath中爲空,還是它dealloc'd?我對變量「表」來自何處以及爲什麼需要在它們之間切換感到困惑。你是否記錄了進入該函數的索引路徑,以確保它符合你的期望? – 2012-04-12 21:45:09

+0

感謝您的回覆。打印數組時不是零,它是空的。比較是檢查代理是否從搜索控制器或​​表中調用。索引路徑是正確的,問題是陣列因某些原因正在被清空。我在同一個應用中至少使用了相同的代碼5次,沒有問題。這很奇怪.. – Dan 2012-04-13 06:31:34