2012-04-12 2 views
0

У меня есть база данных основных данных, и каждая строка показана в таблице.filterArrayUsingPredicate array не сохранен

У меня есть контроллер поиска, который позволяет пользователю искать по имени или фамилии.

Когда я получаю результаты от 'filterArrayUsingPredicate', я перезаряжаю таблицу контроллера поиска, и все работает нормально. В таблице показаны отфильтрованные результаты.

Когда дело доходит до выбора результата, массив результатов пуст и впоследствии сбой из-за [array 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

спасибо. Ведение журнала массива в таблицеView: numberOfRowsInSection - cellForRowAtIndexPath показывает заполненный массив. Кажется, что он освобожден между этим и выбором – Dan

+0

Является ли массив фактически пустым в таблицеView: didSelectRowAtIndexPath :, или он dealloc'd? Я смущен относительно того, откуда приходит переменная «таблица», и почему вам нужно переключаться между ними. Вы зарегистрировали путь индекса, входящий в эту функцию, чтобы убедиться, что это то, что вы ожидаете? –

+0

Спасибо за ваш ответ. При печати массива он не равен нулю, он пуст. Сравнение состоит в том, чтобы проверить, вызван ли делегат из контроллера поиска или таблицы. Путь указателя верен, проблема в том, что массив освобождается для того, где по какой-то причине. Я использовал тот же самый код не менее 5 раз в одном приложении без проблем. Это очень странно .. – Dan