【发布时间】:2012-01-06 16:14:32
【问题描述】:
我正在制作一个具有UITableView 和UISearchDisplayController 视图的应用程序。数据来自NSFetchedResultsController。一切正常:我得到了数据,正在填充表格视图,搜索效果很好。唯一的问题是,如果我搜索然后单击“取消”(不从 UISearchBar 中删除文本),然后返回上一个视图控制器,然后使用 UITableView 和 UISearchDisplayController 转到同一个视图,它会崩溃这正在写入日志:
2012-01-06 16:46:37.559 MyApp[9586:207] *** -[SomeRandomViewController controllerWillChangeContent:]: 发送到已释放实例的消息 0x778d060
我已经用谷歌搜索并在 stackoverflow 上搜索了那个错误,试图释放 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
更新 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]
更新 3
受 Tia 回答的启发,我在 searchDisplayControllerWillEndSearch 方法中将 FRC 及其代表设置为 nil。到目前为止效果很好
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller {
self.fetchedResultsController.delegate = nil;
self.fetchedResultsController = nil;
self.searchFetchedRC.delegate = nil;
self.searchFetchedRC = nil;
[self fetchedResultsController];
}
【问题讨论】:
-
Enable zombies 并回复我们。
-
@tia 感谢您的链接,但它没有帮助
-
@Joe 更新了没有僵尸会发生什么的问题(它们已启用)
-
我没有看到你的
dealloc。你在那里释放控制器吗?
标签: ios uitableview uisearchbar nsfetchedresultscontroller