2017-08-27 62 views
0

我對錄製APP感到驚訝。導航欄在添加準備功能後消失

我試圖在我的第一記錄的ViewController添加導航控制器,其然後可以使用下面的函數製備通過文件名陣列到第二的ViewController:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let controller = segue.destination as? MainViewController 
    controller?.recordArray = recordingArray 
    self.present(controller!, animated: true, completion: nil) 
} 

然而,當在導航欄消失模擬器跑出第二控制器和Xcode中彈出警告

線程1:EXC_BAD_ACCESS(代碼= 2,地址= 0x7fff51edfff8)

有沒有人有任何建議? 謝謝!

+0

爲什麼在展示時強制解包控制器? – Abizern

+0

不,實際上,你爲什麼用這種方法呈現?所有你應該做的是在segue進行演示之前配置destaonation視圖控制器 – Abizern

回答

0

千萬別叫present(_:animated:completion:)裏面prepare(for segue:)

prepare(for segue)系統會在系統即將發生之前自動由系統自動調用,以便您可以準備數據以發送到目標視圖控制器或在執行搜索之前執行任何其他需要的計算。在Storyboard中需要設置一個Segue,它將被自動調用,或者如果它是手動的,則需要使用perform(segue)來調用它,一旦你這樣做,系統將爲你調用prepare(for segue)。你可以看到爲什麼調用另一個導航函數證明是有問題的,因爲你試圖使用兩種不同的方法(segue和present)導航到另一個viewcontroller。

如果您尚未在Storyboard中設置Segue,那麼您還需要這樣做,因爲如果未設置,let controller = segue.destination as? MainViewController將爲nil

一旦你在故事板設立SEGUE,這是你的函數應該什麼樣子:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let controller = segue.destination as? MainViewController { 
     controller.recordArray = recordingArray 
     self.present(controller, animated: true, completion: nil) 
    } 
} 
0

你不應該試圖以這種方法來呈現一個VC,它只是爲你的地方配置目的VC在賽格呈現之前

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard let controller = segue.destination as? MainViewController else { return } 
    controller.recordArray = recordingArray 
}