iOS UISearchController崩溃:应用程序试图在其自身上呈现模态视图控制器

Cur*_*and 8 objective-c ios uisearchcontroller

据崩溃论说,发生了以下崩溃(很少).

应用程序试图在自身上呈现模态视图控制器.提出控制器是.

我根本无法复制这个问题.这就是我设置UISearch控制器的方法.

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.searchBar.delegate = self;

    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.definesPresentationContext = YES;
Run Code Online (Sandbox Code Playgroud)

任何帮助都表示赞赏,因为我完全没有想法.如果需要,我会发布更多代码.

小智 18

当我更新到iOS 11时,我遇到了这个问题.我的情况是,我有一个Textfield,当用户开始编辑它时,搜索视图,基本上是一个带有搜索栏作为标题的tableview弹出,一次是tableview单元格被拍了它应该关闭.

问题似乎是因为iOS 11,操作系统尝试恢复firstResponder状态.长话短说.

当我添加active = NO时,它有助于我的选择方法,就像这样

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   self.searchController.active = NO; // Add this !
   ...

   [self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

  • 所以我在 iOS 11.4、11.4.1 中也遇到了这个问题(至少在现场的崩溃日志中)。我能够重现它并修复它。就我而言,我有两个 VC。VC1 显示搜索控制器并以模态显示 VC2。用户点击 VC2 中的一个按钮,它消失(通过dismiss()),然后VC1 消失(通过dismiss())。如果searchController 在VC1 上处于活动状态,则在VC1 调用dismiss() 之后会发生此断言失败。我在dismiss() 之前通过searchController.isActive = false 修复了它。 (2认同)