Я делаю приложение, у которого есть представление с UITableView
с UISearchDisplayController
.Данные поступают с NSFetchedResultsController
.Все работает нормально: я получаю данные, представление таблицы заполняется, поиск работает отлично.Единственная проблема заключается в том, что если я выполняю поиск и затем нажимаю «Отмена» (без удаления текста из UISearchBar), а затем возвращаюсь к предыдущему контроллеру представления и затем возвращаюсь к тому же представлению с UITableView
и UISearchDisplayController
, он падает сэто записывается в журнал:
2012-01-06 16: 46: 37.559 MyApp [9586: 207] *** - [SomeRandomViewController controllerWillChangeContent:]: сообщение отправлено в освобожденный экземпляр 0x778d060
Я погуглил и перепустил стек из-за этой ошибки, попытался освободить переменную NSFetchedResultsController
, установил ее и ее делегат в nil, но ничего не помогает.
И если я сделаю несколькопоиск, затем удалите текст из строки поиска, а затем нажмите «Назад» и вернитесь к этому представлению, оно прекрасно работает.
Немного кода:
- (void)viewDidUnload {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
self.fetchedResultsController = nil;
self.searchFetchedRC = nil;
[super viewDidUnload];
}
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller {
self.fetchedResultsController = nil;
[self fetchedResultsController];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
self.searchDisplayController.searchBar.text = @"";
self.searchDisplayController.active = NO;
[self searchDisplayControllerWillEndSearch:self.searchDisplayController];
return YES;
}
Любойбудет признательна за помощь
Обновление
Без зомби вывод в журнал:
2012-01-09 09:25:48.128 бутан [17325: 207] - [UITextMagnifierTimeWeightedPoint controllerWillChangeContent:]: нераспознанный селектор отправлен в экземпляр 0x8251dc0
Update 2
Метод Dealloc:
- (void)dealloc {
[self.mySearchDisplayController release];
self.mySearchDisplayController.delegate = nil;
self.mySearchDisplayController = nil;
[self.fetchedResultsController release];
self.fetchedResultsController.delegate = nil;
self.fetchedResultsController = nil;
[self.searchFetchedRC release];
self.searchFetchedRC.delegate = nil;
self.searchFetchedRC = nil;
[self.tableView release];
[textView release];
self.tableView = nil;
self.tableView.delegate = nil;
[super dealloc];
}
mySearchDisplayController = UISearchDisplayController
fetchedResultsController and searchFetchedRC = NSFetchedResultsControllers
tableView = UITableView
textView = [HPGrowingTextView][1]
Update 3
Вдохновленный ответом Tia, я установил значения FRC и их делегатов равными нулю в методе searchDisplayControllerWillEndSearch
.Работает пока хорошо
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller {
self.fetchedResultsController.delegate = nil;
self.fetchedResultsController = nil;
self.searchFetchedRC.delegate = nil;
self.searchFetchedRC = nil;
[self fetchedResultsController];
}