“已修复”Strange“无法识别的选择器发送到实例”崩溃发生在iOS8 beta5上

时间:2014-08-28 08:26:06

标签: ios xcode ios8 first-responder

我的应用在iOS7上正常运行,但在iOS8上崩溃。

我已经看过关于这个主题的各种问题,但从来没有找到一个很好的解决方案。

我有一个使用UITableViewController的应用程序,而UITableViewController有一个SearchDisplayController实例调用m_searchDisplayController。

首次点击搜索栏搜索内容时,表格视图会显示结果,搜索栏会显示resignFirstResponder.But再次点击搜索栏,应用程序崩溃:

-[MyFavoritesViewController _searchController]: unrecognized selector sent to instance

这是堆栈:

enter image description here

然后我尝试将_searchController方法添加到MyFavoritesViewController类,如下所示:

 - (UISearchDisplayController *)_searchController
 {
      return nil;
 }

然后app工作正常,但搜索栏的textField无法输入。所以我试试这个:

 - (UISearchDisplayController *)_searchController
 {
      return m_searchDisplayController;
 }

另一条崩溃消息显示:

-[UISearchDisplayController _searchBarShouldFinalizeBecomingFirstResponder]: unrecognized selector sent to instance

我不知道如何找到错误代码,任何人都有解决方案吗?提前谢谢。

我的情况:

我在UISearchBar中做了一些黑客攻击,并将searchBar的textField的委托更改为某个对象。原则上," _searchController"系统方法将调用searchBar的textField的委托,但现在,它将调用我的对象然后崩溃。我希望它有所帮助。

2 个答案:

答案 0 :(得分:1)

如果你试图通过将代理人分配到UISearchBar textField来响应被点击的清除按钮,这将在iOS8中中断。尝试另一种技术。

也许是UISearchBarDelegate的方法

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    // fired whenever the text is changed, or clear tapped
    if (searchText.length == 0) {
       // Do something
    }
}

现在,如果您需要对最后一个退格键进行不同的响应,那么您将不得不解决一些问题,例如响应退格键,或添加退格无法删除的不可见字符,但清除确实删除。这些只是2条建议。

答案 1 :(得分:0)

我遇到了同样的问题。 使用SDK 8.0+编译项目,问题将消失。 无需更改代码。

另一种解决方案是,不要分配UISearchBar委托中的UITextField,并将其他功能(如果有)移动到其他位置。