2017-03-11 20 views
1

我想在我的視圖控制器內使用init爲了初始化一些屬性。我試過創建一個默認的init並覆蓋現有的UIViewController,並且所有的東西都沒有錯誤地編譯,但是沒有一個被調用。這是爲什麼?初始化UIViewController內部從來沒有叫

這些是我目前的inits,沒有人叫。

init(){ 
    cameraSession = AVCaptureSession() 
    cameraSession.sessionPreset = AVCaptureSessionPresetLow 
    captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) as AVCaptureDevice 

    super.init(nibName: nil, bundle: nil) 
} 

override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: Bundle!) { 
    cameraSession = AVCaptureSession() 
    cameraSession.sessionPreset = AVCaptureSessionPresetLow 
    captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) as AVCaptureDevice 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
} 

required init?(coder aDecoder: NSCoder) { 
    cameraSession = AVCaptureSession() 
    cameraSession.sessionPreset = AVCaptureSessionPresetLow 
    captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) as AVCaptureDevice 

    super.init(coder: aDecoder) 
} 
+0

你是如何創建你的視圖控制器目標代碼或XIB,如果代碼然後如何? –

回答

2

這取決於你如何創建你的視圖控制器對象。

如果你使用故事板或廈門國際銀行則此方法將被調用

required init?(coder aDecoder: NSCoder) { 

} 
+0

原來我沒有設置我的初始視圖控制器 –

0

而不是使用初始化器,嘗試初始化與使用設計和通話模式的默認值的屬性(見http://www.apeth.com/swiftBook/ch02.html#SECdefineandcallhttp://www.apeth.com/swiftBook/ch03.html#_computed_initializer),像這樣:

class ViewController { 
    var cameraSession: AVCaptureSession = { 
     let session = AVCaptureSession() 
     session.sessionPreset = AVCaptureSessionPresetLow 
     return session 
    }() 

    var captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) as AVCaptureDevice 
} 

那麼就沒有必要的初始化器在所有!