2016-11-08 65 views
0

我試圖在viewController添加子視圖。爲了執行該操作,我創建了一個xib文件和一個關聯的類。相關類的代碼如下:應用程序突然崩潰時調用Super.init(編碼器:解碼器)

import UIKit 

@IBDesignable class CustomClassViewController: UIView { 

@IBOutlet weak var myLabel: UILabel! 

var Dummyview : UIView! //= UIView() 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    setup() 
} 

required init (coder aDecoder : NSCoder){ 

    super.init(coder : aDecoder)! 
    setup() 
} 

func setup() { 
    Dummyview = loadViewFromNib() 
    Dummyview.frame = bounds 
    Dummyview.autoresizingMask = UIViewAutoresizing.FlexibleWidth 
    Dummyview.autoresizingMask = UIViewAutoresizing.FlexibleHeight 
    addSubview(Dummyview) 
} 

func loadViewFromNib() -> UIView { 
    let bundle = NSBundle(forClass : self.dynamicType) 
    let nib = UINib(nibName: "Custom View", bundle: bundle) 
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 
    return view 
} 

它顯示沒有錯誤在運行應用程序但它運行應用程序時崩潰。錯誤顯示如下:

「威脅1:EXC_BAD_ACCESS(代碼= 2,地址= 0x7fff52776e88)」

super.init(coder : aDecoder)!

但是沒有錯誤中輸出。

我試圖在herehere但不工作的提供的解決方案。

我該怎麼辦?任何解決方案請告訴我。 在此先感謝

回答

0

初始化與編碼器可能會失敗,你不應該使用武力展開那裏。請嘗試以下操作:

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    setup() 
} 

此外,您的類CustomClassViewController是UIView的子類,而不是UIViewController的子類。這條線

@IBDesignable class CustomClassViewController: UIView { 

更改爲

class CustomClassViewController: UIViewController { 

注:視圖控制器不能IBDesignable

+0

感謝您的意見。我試過你提供的解決方案,但它並沒有爲我工作。另一件事如果我不聲明類爲@IBDesignable那麼它不會顯示在我的視圖控制器中作爲子視圖 –

+0

我的意思是「它不會在我的視圖控制器中顯示爲子視圖」請先了解如何使用IBDesignable 。這是一篇非常好的文章: http://nshipster.com/ibinspectable-ibdesignable/ UIViewController不能是IBDesignable。你混淆了視圖和ViewController。你想要什麼?一個IBDesignable UIView或UIViewController? – Istvan

0

筆尖不應該有一類界面生成器設置。否則,當你的類每次調用nib時都會嘗試實例化自己,你會得到一個無限循環。

當您想要在故事板中使用此視圖模板時,請拉入視圖並將其設置爲您的自定義視圖類。