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