iOS 12 上的 UISearchController 子类崩溃

Posted

技术标签:

【中文标题】iOS 12 上的 UISearchController 子类崩溃【英文标题】:UISearchController subclass crash on iOS 12 【发布时间】:2021-02-22 15:42:02 【问题描述】:

有什么方法可以在 ios12 上做 UISearchController 的子类吗?

final class CustomSearchController: UISearchController 

private let onCancel: () -> Void

init(
    onSelect: @escaping (MKPlacemark) -> Void,
    onCancel: @escaping () -> Void
) 
    self.onCancel = onCancel
    let searchResultsController = SearchResultsController(onSelect: onSelect)
    super.init(searchResultsController: searchResultsController)
    searchResultsUpdater = searchResultsController
    obscuresBackgroundDuringPresentation = true
    searchBar.delegate = self

以上代码在 iOS14 上运行,但在 iOS12 上崩溃。原因是 super.init(searchResultsController) 调用 self.init(nibName: ...) 并且这再次调用 CustomSearchController 初始化器 for init(nibName:...) 在 CustomSearchController

【问题讨论】:

【参考方案1】:

除了你已经覆盖的初始化器之外,你还应该覆盖init(nibName:bundle)init(nibName:bundle:) 是指定初始化器,而init(rootViewController:) 是便利初始化器(至少在 iOS 13 以下)。

只需在你的类中插入额外的 sn-p:

override init(nibName: String?, bundle: Bundle?) 
    onCancel = 
    super.init(nibName: nibName, bundle: bundle)

而在您的初始化程序中,您必须在超级初始化调用之后移动 self.onCancel = onCancel

它应该可以工作。

【讨论】:

以上是关于iOS 12 上的 UISearchController 子类崩溃的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式显示 UISearchController 的搜索栏

iOS 12 上的 UISearchController 子类崩溃

iOS 12.4.2 上的 iOS 崩溃“无法执行读取 Objective-C 的支持代码”而不是 12.0.1

无法将 Mac 上的文本粘贴到 ios 模拟器 Xcode 12 中?

在 Macbook M1 上的 Xcode 12.4 中构建后,在 iOS 上的 React Native 中找不到 YogaKit.modulemap

使用 Admob SDK 版本 6.12.0 的 Xamarin iOS 应用程序上的 Admob 问题