Что я обнаружил до сих пор, так это то, что с любым идентификатором segue, который не является поповерным, это вызовы, сделанные iOS:
- prepareForSegue (на контроллере источника)
- viewDidLoad(на контроллере назначения)
во время перехода в режиме поповера порядок вызовов:
- viewDidLoad (на контроллере назначения)
- prepareForSegue (на контроллере источника)
только потому, что я поместил всю свою логику в viewDidLoad, контроллер не был правильно инициализирован, и произошел сбой.Так что это не совсем верно, что prepareForSegue не вызывается, правда в том, что я получаю исключение, и я ошибочно ошибся, так как prepareForSegue не вызывается.
Я не могу поместить все в viewWillAppear, потому что вызовCoreData должен был быть сделан, и я не хотел проверять, были ли объекты в порядке каждый раз, когда отображение представления.
Как я решил это?Я создал другой метод в контроллере назначения
-(void)prepareViewController {
// initialization logic...
}
и изменил метод prepareForSegue в самом контроллере источника:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
MyViewController *mvc = (MyViewController*)[segue destinationViewController];
// passing variable
// with segue style other than popover this called first than viewDidLoad
mvc.myProp1=@"prop1";
mvc.myProp2=@"prop2";
// viewWillAppear is not yet called
// so by sending message to controller
// the view is initialized
[mvc prepareViewController];
}
не знаю, является ли это ожидаемым поведением с popover, в любом случае, сейчасработают.