在iOS8 beta5上发生的“未识别的选择器发送到实例”崩溃问题已被修复。

3

我的应用在iOS7上运行良好,但在iOS8上崩溃。

我看到了许多关于这个问题的问题,但从未找到一个好的解决方案。

我有一个正在使用UITableViewController的应用程序,并且UITableViewController具有名为m_searchDisplayController的SearchDisplayController实例。

当我首次点击搜索栏搜索内容时,表视图会显示结果,然后搜索栏会resignFirstResponder。 但是当我再次点击搜索栏时,应用程序会崩溃:

-[MyFavoritesViewController _searchController]: unrecognized selector sent to instance

这是一个栈结构:

enter image description here

然后我尝试将 _searchController 方法添加到 MyFavoritesViewController 类中,就像这样:

 - (UISearchDisplayController *)_searchController
 {
      return nil;
 }

应用程序正常运行,除了搜索栏的文本框无法输入。因此,我尝试了以下方法:

 - (UISearchDisplayController *)_searchController
 {
      return m_searchDisplayController;
 }

并且另一个崩溃信息显示如下:

-[UISearchDisplayController _searchBarShouldFinalizeBecomingFirstResponder]: unrecognized selector sent to instance

我不知道如何定位错误代码,有没有人对此有解决办法?先谢谢了。

我的情况:

我对UISearchBar进行了一些修改,并将searchBar的textField的代理更改为某个对象。原来,系统的“_searchController”方法会调用searchBar的textField的代理,但现在它会调用我的对象,然后崩溃。希望这能帮到你。


显示堆栈跟踪。 - trojanfoe
这里是堆栈跟踪。 - ylovesy
我找到了解决方案。因为我做了一些破解导致了崩溃。 - ylovesy
你解决了吗?我还是收到同样的错误。 - Zeeshan
是的,我在 UISearchBar 中进行了一些修改,并将 searchBar 的 textField 的代理更改为某个对象。原本,系统的 "_searchController" 方法会调用 searchBar 的 textField 的代理,但现在它会调用我的对象,然后崩溃。希望这可以帮到你。 - ylovesy
2个回答

2

如果您试图通过为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
    }
}

现在,如果您需要对最后一个被删除的键作出不同的响应,则需要想出一些解决方法,例如响应退格键或添加一个无法被退格键删除但清除可以删除的不可见字符。这仅是两个建议。


0

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

另一个解决方案是不要将UISearchBar中的UITextField分配为代理,并将其他附加功能(如果有)移动到其他位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接