无法识别的选择器发送到从笔尖实例化的视图控制器中的实例错误
unrecognized selector sent to instance error in view controller instantiated from a nib
我创建了一个名为 FacebookLoginView 的 UIViewController
并带有一个 nib 文件。 nib 的文件所有者设置为 FacebookLoginView。我在上面添加了两个按钮,并在 .swift 文件中添加了 IBAction
s。
import UIKit
import FacebookLogin
class FacebookLoginView: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: - Actions
@IBAction func didTapCloseButton(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
@IBAction func didTapFacebookLoginButton(_ sender: UIButton) {
print(#function)
}
}
我实例化了这个 FacebookLoginView 并像这样从另一个视图控制器显示它。
let vc = FacebookLoginView.loadFromNib()
present(vc, animated: true, completion: nil)
extension UIViewController {
class func loadFromNib<T: UIViewController>() -> T {
return T(nibName: String(describing: self), bundle: nil)
}
}
当我点击 FacebookLoginView 上的任一按钮时,它崩溃并出现以下错误。
-[UIViewController didTapFacebookLoginButton:]: unrecognized selector sent to instance 0x14d62940 2017-08-07 20:51:00.997802+0530
RandomFlyer[4010:910999] *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '-[UIViewController
didTapFacebookLoginButton:]: unrecognized selector sent to instance
0x14d62940'
我删除并重新添加了 IBAction
个连接,但错误仍然存在。
使用界面构建器 (IB) 时,请确保您拥有的每个视图都与您的 outlets 和 set events 良好连接存在,像这样:
编辑:虽然此答案可应用于 IB 中常见崩溃的最常见原因,但如果这不能回答您的问题,您可能需要编辑您的问题。
它说:
-[UIViewController didTapFacebookLoginButton:]: unrecognized selector sent to instance
您的 didTapFacebookLoginButton
未在您的 class 中找到,即 FacebookLoginView
,您实际上是将 Touch Up Inside
事件指向您的 File Owner
。删除它并按照我的屏幕截图中的示例进行操作。
我猜你没有正确使用泛型,其中 T 是 UIViewController
类型,但初始化器需要具体类型。这应该可以代替:
extension UIViewController {
class func loadFromNib() -> Self {
return self.init(nibName: String(describing: self), bundle: nil)
}
}
我创建了一个名为 FacebookLoginView 的 UIViewController
并带有一个 nib 文件。 nib 的文件所有者设置为 FacebookLoginView。我在上面添加了两个按钮,并在 .swift 文件中添加了 IBAction
s。
import UIKit
import FacebookLogin
class FacebookLoginView: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: - Actions
@IBAction func didTapCloseButton(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
@IBAction func didTapFacebookLoginButton(_ sender: UIButton) {
print(#function)
}
}
我实例化了这个 FacebookLoginView 并像这样从另一个视图控制器显示它。
let vc = FacebookLoginView.loadFromNib()
present(vc, animated: true, completion: nil)
extension UIViewController {
class func loadFromNib<T: UIViewController>() -> T {
return T(nibName: String(describing: self), bundle: nil)
}
}
当我点击 FacebookLoginView 上的任一按钮时,它崩溃并出现以下错误。
-[UIViewController didTapFacebookLoginButton:]: unrecognized selector sent to instance 0x14d62940 2017-08-07 20:51:00.997802+0530 RandomFlyer[4010:910999] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController didTapFacebookLoginButton:]: unrecognized selector sent to instance 0x14d62940'
我删除并重新添加了 IBAction
个连接,但错误仍然存在。
使用界面构建器 (IB) 时,请确保您拥有的每个视图都与您的 outlets 和 set events 良好连接存在,像这样:
编辑:虽然此答案可应用于 IB 中常见崩溃的最常见原因,但如果这不能回答您的问题,您可能需要编辑您的问题。
它说:
-[UIViewController didTapFacebookLoginButton:]: unrecognized selector sent to instance
您的 didTapFacebookLoginButton
未在您的 class 中找到,即 FacebookLoginView
,您实际上是将 Touch Up Inside
事件指向您的 File Owner
。删除它并按照我的屏幕截图中的示例进行操作。
我猜你没有正确使用泛型,其中 T 是 UIViewController
类型,但初始化器需要具体类型。这应该可以代替:
extension UIViewController {
class func loadFromNib() -> Self {
return self.init(nibName: String(describing: self), bundle: nil)
}
}