簡體   English   中英

切換到XCode 7.0(.1)后,發布模式下的自定義視圖(XIB)崩潰

[英]Custom view (XIB) crash in Release mode after switching to XCode 7.0(.1)

我有一個在XCode 7.0 GM之前運行良好的應用程序。 當我使用XCode 7.0 GM構建它之后,它在啟動時開始崩潰。 加載我的自定義視圖之一時崩潰,代碼如下:

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 (因為它需要更多的時間來執行)或由調試模式(因為它的運行速度較慢)解決,但據我所知,兩個視圖的加載都必須在主線程,還是我錯了? 任何幫助深表感謝!

編輯1:這是整個項目

EDIT2:剛剛發現,如果我將loadViewWithName內容復制到loadView ,它不會崩潰。

我找到了解決問題的方法-做了全局函數UIView擴展。 我仍然不確定是什么問題,為什么代碼不能與全局函數一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM