2014-10-28 70 views
0

我想在迅速提出一個詳細視圖控制器,像這樣實例化和推視圖控制器編程自定義初始迅速

let detailController = MyDetailUIViewController(nibName: "MyDetailUIViewController", bundle: NSBundle.mainBundle(), data:myData) 
self.navigationController?.pushViewController(detailController, animated:true) 

我遇到的問題是如何寫我初始化爲MyDetailViewController:

class MyDetailUIViewController: UIViewController { 

private var data: MyData 

init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!, data:MyData) { 
    self.data = data 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
} 

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

我得到一個錯誤,我的數據屬性未在super.init調用初始化。任何人都可以解釋我怎麼能做到這一點?我確信我可以使我的數據屬性可選,並在初始化後傳遞它,但肯定有一種方法可以使這個工作。

回答

1

如果你聲明你的data變量是非可選的,你必須確保所有的init方法初始化它。這是不是在你的類的情況下,由於

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

不initalize您data

+0

因此,我從這個拿走然後是我的數據屬性HAS是可選的給定實現init(coder aDecoder:NSCoder!)的要求? – nwales 2014-10-28 15:06:28

+0

是的,就是這一點。如果無法將其初始化爲空:'private var data:MyData = MyData()' – zisoft 2014-10-28 15:11:12

0

如果你聲明你的初始化爲convenience init()那麼你將不必聲明init(coder:)的實現,這也可以解決你的問題。

相關問題