在 tableHeaderView iOS 7 中使用 UISearchBar 访问错误

Posted

技术标签:

【中文标题】在 tableHeaderView iOS 7 中使用 UISearchBar 访问错误【英文标题】:Bad Access With UISearchBar in tableHeaderView iOS 7 【发布时间】:2013-09-19 19:26:57 【问题描述】:

我正在尝试在我的 UITableview 的 tableHeaderView 中使用 UISearch 栏。此搜索功能在 ios 6 上没有问题,但由于针对 7.0 SDK 构建,我在从另一个视图返回后点击搜索栏时出现崩溃。第一次查看搜索tableView,搜索栏按预期工作。但是一旦我深入到详细视图,当我点击它时,搜索栏会抛出一个 exc-bad-access 异常。在我的方案中使用 NSZombies 不会记录这种不良访问。这是设置标题视图的代码:

    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
    self.searchController = [[UISearchDisplayController alloc]
                             initWithSearchBar:self.searchBar contentsController:self];
    self.searchController.delegate = self;
    self.searchController.searchResultsDataSource = self;
    self.searchController.searchResultsDelegate = self;

    self.tableView.tableHeaderView = self.searchBar;

属性self.searchBarself.searchController 都被声明为强引用。任何地方都收到无内存警告。 iOS 7 中的 UISearchBar 或 tableHeaderView 有什么变化吗?值得注意的是,我正在向 UISearchBar 应用外观代理,但它在第一次加载时看起来和工作正常。

【问题讨论】:

【参考方案1】:

我在 iOS7 中遇到了 UISearchBar 崩溃的问题,直到我在 UITableViewController 被解除之前开始将我的 UISearchDisplayController 设置为非活动状态。添加以下内容对我有用,但我不知道我们的问题是否相关:

[_mySearchDisplayController setActive:NO];

【讨论】:

【参考方案2】:

原来崩溃是由于使用了sectionIndexTitlesForTableViewUISearchDisplayController(参见this question)。这似乎是 iOS 7 SDK 中的一个错误。相反,我现在使用CMIndexBar 作为第三方替代品。就像原生部分索引一样工作,永不崩溃,易于定制。

【讨论】:

以上是关于在 tableHeaderView iOS 7 中使用 UISearchBar 访问错误的主要内容,如果未能解决你的问题,请参考以下文章

-systemLayoutSizeFittingSize:在 iOS 8 下为 tableHeaderView 返回不正确的高度

iOS UITableView tableHeaderView 高度变了

在 ios7 上滚动 uitableview 时出现 UISearchbar (tableHeaderView) 问题

iOS UITableView 在设置 TableHeaderView 后以编程方式覆盖自动布局约束

iOS UITableView tableHeaderView 在转换/重新出现后调整大小

UITableViewController 中的 iOS tableHeaderView 从不显示