ios - 切换到 XCode 7.0(.1) 后,自定义 View (XIB) 在 Release模式下崩溃

标签 ios xcode swift uiview xcode7

我有一个应用程序在 XCode 7.0 GM 之前一直运行良好。在我使用 XCode 7.0 GM 构建它之后,它开始在启动时崩溃。它在加载我的自定义 View 之一时崩溃,代码如下:

func loadViewWithName(viewName: String, owner: UIView) {
    let view = NSBundle.mainBundle().loadNibNamed(viewName, owner: owner, options: nil).first as! UIView
    view.frame = owner.bounds
    owner.addSubview(view)
}

class AddView2 : UIView {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        loadView()
    }

    @IBOutlet weak var pendingToAddNotification: UIView!

    private func loadView() {
        loadViewWithName("AddView2", owner: self)

        // print("asd") // if this is uncommented the app doesn't crash

        pendingToAddNotification.backgroundColor = UIColor.blackColor() // CRASH HERE, when I try to to change something in the loaded view, most probably because the outlet isn't set (it is nil), which was my assumption since it is called after view is loaded. 
    }
}

class AddView : UIView {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        loadView()
    }

    @IBOutlet weak var pendingToAddNotification: AddView2!

    private func loadView() {
        loadViewWithName("AddView", owner: self)

        pendingToAddNotification.backgroundColor = UIColor.blackColor()
    }
}

,其中AddView包含AddView2,ViewController包含AddView。我有 AddView.xib 和 AddView2.xib 文件,其中文件的所有者分别设置为 AddView 和 AddView2。

我以为我做错了什么,但很奇怪为什么相同的代码在 DEBUG 模式下工作,更有趣的是为什么如果我取消注释上面提到的 print 应用程序不会崩溃并启动正如预期的那样。

XCode 7.0(.1) 中是否有任何更改导致此类问题? 它看起来像是某种竞争条件,由 print (因为它需要额外的时间来执行)或由 Debug模式(因为它更慢)修复,但据我所知这两种观点'加载必须在主线程中完成,还是我错了? 非常感谢任何帮助!

EDIT1:这是整个 project

EDIT2:刚发现如果我将 loadViewWithName 内容复制到 loadView,它不会崩溃。

最佳答案

我找到了问题的解决方案 - 制作了全局函数 UIView 扩展。我仍然不确定问题出在哪里以及为什么代码无法使用全局函数。

关于ios - 切换到 XCode 7.0(.1) 后,自定义 View (XIB) 在 Release模式下崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32842892/

相关文章:

ios - 从 UIAlertController 按钮导航到 ViewController 单击

ios - 如何在不通过 Interface Builder 获取 UIButton 类的背景的情况下添加图像?

ios - 从 CGFloat 数组创建属性 - iOS

iphone - Xcode - iPhone - 配置文件与默认钥匙串(keychain)中的任何有效证书/私钥对不匹配

ios - UIApplication.sharedApplication().setStatusBarStyle() 已在 iOS 9 中弃用

ios - 使用场景套件和 swift IOS 调用 func 时出现 fatal error

arrays - 在 Swift 中遍历 UInt8 整数数组;对数组的子集执行计算

ios - 更改 Storyboard中拖动的导航栏的标题

ios - 当 UITableView 滚动到非顶部并显示索引 2 超出范围 [0..1] 时,它会崩溃

ios - 如何在IOS上检测扫描的是哪根手指