2017-12-31 229 views
0
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let strategyPicker=segue.destination as! StrategyViewController 
    strategyPicker.folder=self.folder 
    NSLog("Tried to pass \(self.folder) into \(String(describing: strategyPicker.folder))") 
} 

lldb에서 디버깅하려고하면 단순히 segue.destination을 할당하면 대상보기 컨트롤러에서 viewDidAppear가 트리거되는 것 같습니다. 폴더를 전달하기 전에 대상에서 viewDidAppear에서 치명적인 오류가 발생합니다. 모든 이니셜 라이저 코드가 실행되어야한다는 것을 이해합니다 (그리고 두 개의 필드가 lldb e 명령에 따라 올바르게 초기화됩니다). prepareForSegue가 끝나기 전에 viewDidAppear가 호출된다는 것은 의미가 없습니다.Segue Destination Call은 언제 표시합니까?

대상 viewDidAppear에서 오류가 발생하기 전에 strategyPicker.folder 할당 및 NSLog에 중단 점이 있으며 둘 다 트리거를하지 않습니다.

어떤 조언이 필요합니까? prepare(for:sender:)를 호출하기 전에

답변

2

viewDidLoad/viewWillAppear/viewDidAppear가 호출되지 않습니다.

올바른 메소드 서명이 없으므로 표시된 기능이 호출되지 않습니다. 당신이 당신의 목적지 뷰 컨트롤러에 충돌을 언급하기 때문에 당신은 또한

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let strategyPicker=segue.destination as? StrategyViewController { 
     strategyPicker.folder=self.folder 
     NSLog("Tried to pass \(self.folder) into \(String(describing: strategyPicker.folder))") 
    } 
} 

싶어, 당신이 folder을 힘이 랩핑 해제있는 것 같다; 당신은 아마 이것과 코드를 방어 적으로 다시 생각해야합니다. 조건부로 랩 해제하고 foldernil 인 경우 적절한 오류 메시지를 표시하십시오.

+0

사과드립니다. 코드는 스위프트 2로 작성되었으며, 스위프트 3에서는 무시되고 수동으로는 - 잘못 스위프트 4로 변환되었습니다. – TimOnTheLeftCoast