gpt4 book ai didi

ios - [UIView setImage :]: unrecognized selector sent to instance when init UISearchController

转载 作者:搜寻专家 更新时间:2023-11-01 06:05:34 33 4
gpt4 key购买 nike

我正在开发一个 iOS 应用程序,它具有使用 UISearchController 为国家列表提供搜索功能的功能。直到最后一个版本,一切正常。但是现在,在应用程序中添加了一些新功能后,我遇到了一个导致应用程序崩溃的奇怪错误。每次我尝试调用 UISearchController(searchResultsController:nil) 时,我的应用程序都会崩溃,原因是 [UIView setImage:]: unrecognized selector sent to instance。我追溯了以前发布的所有以前的提交,直到现在,但仍然没有找到罪魁祸首。我想就如何调试这个问题提出建议,因为我无法调试到 UISearchController 初始化自身。

注意 我没有提供一些代码片段,因为我觉得它没有必要,我尝试了几种方法,包括在另一个地方调用 UISearchController(searchResultsController:nil),删除UISearchController 的使用,删除了一些可疑的扩展......以确保 swift 没有给我另一个错误的崩溃报告

编辑 我的应用程序的目标版本是 8.0,我在 XCode 7.3.1、MacOS El Capitan 上使用 swift 2.2

EDIT 2 我尝试切换到 [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; 但不幸的是,仍然因为同样的原因而崩溃。

编辑 3 来自 Crashlytics 的崩溃日志:

Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x181ec2db0 __exceptionPreprocess
1 libobjc.A.dylib 0x181527f80 objc_exception_throw
2 CoreFoundation 0x181ec9c4c __methodDescriptionForSelector
3 CoreFoundation 0x181ec6bec ___forwarding___
4 CoreFoundation 0x181dc4c5c _CF_forwarding_prep_0
5 UIKit 0x18710f9d0 -[UISearchBar(UISearchBarStatic) _updateMagnifyingGlassView]
6 UIKit 0x18710d778 -[UISearchBar(UISearchBarStatic) _setupSearchField]
7 UIKit 0x18719d2c8 -[UISearchBar searchField]
8 UIKit 0x187114684 -[UISearchBar setPlaceholder:]
9 UIKit 0x1879c0d3c -[UISearchController _commonInit]
10 UIKit 0x1879c10cc -[UISearchController initWithSearchResultsController:]
11 EMCCountryPickerController 0x100bda6e8 -[EMCCountryPickerController loadView] (EMCCountryPickerController.m:136)
12 UIKit 0x1870208ec -[UIViewController loadViewIfRequired]
13 UIKit 0x187020844 -[UIViewController view]
14 UIKit 0x18790f450 -[_UIFullscreenPresentationController _setPresentedViewController:]
15 UIKit 0x18737cd90 -[UIPresentationController initWithPresentedViewController:presentingViewController:]
16 UIKit 0x1873a2af4 -[UIViewController _presentViewController:withAnimationController:completion:]
17 UIKit 0x1873a5890 -[UIViewController _performCoordinatedPresentOrDismiss:animated:]
18 UIKit 0x18711b3cc -[UIViewController presentViewController:animated:completion:]
19 UIKit 0x193c3084c -[UIViewControllerAccessibility presentViewController:animated:completion:]
20 bluebird-ios 0x10012e244 CountryPicker.didTapOnView() -> () (CountryPicker.swift:132)
21 bluebird-ios 0x10012e29c @objc CountryPicker.didTapOnView() -> () (CountryPicker.swift)
22 UIKit 0x1875b1f30 _UIGestureRecognizerSendTargetActions
23 UIKit 0x1871c6728 _UIGestureRecognizerSendActions
24 UIKit 0x1870537a0 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:]
25 UIKit 0x1875b3530 ___UIGestureRecognizerUpdate_block_invoke898
26 UIKit 0x1870124d8 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks
27 UIKit 0x18700f254 _UIGestureRecognizerUpdate
28 UIKit 0x187051610 -[UIWindow _sendGesturesForEvent:]
29 UIKit 0x187050c0c -[UIWindow sendEvent:]
30 UIKit 0x18702104c -[UIApplication sendEvent:]
31 UIKit 0x193c0545c -[UIApplicationAccessibility sendEvent:]
32 UIKit 0x18701f628 _UIApplicationHandleEventQueue
33 CoreFoundation 0x181e7909c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
34 CoreFoundation 0x181e78b30 __CFRunLoopDoSources0
35 CoreFoundation 0x181e76830 __CFRunLoopRun
36 CoreFoundation 0x181da0c50 CFRunLoopRunSpecific
37 GraphicsServices 0x183688088 GSEventRunModal
38 UIKit 0x18708a088 UIApplicationMain
39 bluebird-ios 0x100225a3c main (AppDelegate.swift:13)
40 libdispatch.dylib 0x18193e8b8 (Missing)

最佳答案

问题已解决

根本原因是因为在 Initialize 上,UISearchBar 将调用 _updateMagnifyingGlassView 将放大图像设置为其 UITextField 的左 View 。在我的代码中,我有以下扩展名:

extension UITextField {
@IBInspectable var paddingLeft: CGFloat {
get {
return self.leftView?.frame.width ?? 0
} set {
let paddingView = UIView(frame: CGRectMake(0, 0, newValue, self.frame.height))
self.leftView = paddingView
self.leftViewMode = .Always
}
}
}

请注意 paddingLeft 属性不是可选属性,这将导致 UITextField0 设置为此属性的默认值,从而创建一个宽度为 0 的 View ,并通过 setter 方法分配给 leftView。这会导致 UISearchBar 在调用 _updateMagnifyingGlassView 时崩溃,如您在上面的崩溃日志中所见。

结论

使用扩展时要小心,尤其是当它会修改现有 UIKit 控件的默认行为时

关于ios - [UIView setImage :]: unrecognized selector sent to instance when init UISearchController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749894/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com