iOS 8.4 – iboutlet不能以编程方式创build视图控制器

当在iOS 8.4中以编程方式加载UIViewController时,我始终将注册为IBOutlets为零。 这是在任何iOS 8.4设备上导致崩溃。 完全相同的代码在iOS 9和9.0.1上运行平稳。 作为参考,这是视图控制器的一个片段

class B8AVPermissionsViewController: B8BaseViewController { @IBOutlet weak var closeButton: UIButton! @IBOutlet weak var cameraButton: UIButton! @IBOutlet weak var microphoneButton: UIButton! var delegate: B8PermissionRequestingDelegate? = nil; override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) } override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated); NSLog("cameraButton: \(cameraButton)") } 

打印出cameraButton: nil

创build它的代码如下所示:

 self.permissionViewController = B8AVPermissionsViewController() self.permissionViewController!.delegate = self dispatch_async(dispatch_get_main_queue(), { self.presentViewController(self.permissionViewController!, animated: true, completion: nil) }) 

我究竟做错了什么?

问题是在iOS 8中有bug。在iOS 8中说B8AVPermissionsViewController()不会自动加载相关的笔尖。 你需要解决这个问题。 例如,你可以明确地调用init(nibName:bundle:)告诉它在哪里。

这个bug在iOS 9中得到修复,这就是为什么你没有看到同样的问题。