0

Когда я звоню performSegueWithIdentifier до viewDidLoad и viewDidAppear иногда это работает, а иногда нет.performSegueWithIdentifier before viewDidLoad и viewDidAppear иногда это работает, а иногда нет

AppDelegate

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    NSLog(@"applicationDidBecomeActive"); 
[self abcNotif]; // the method post the notification. 
} 

VC1:

-(void)awakeFromNib { 

    NSLog(@"awakeFromNib"); 
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(theNotif:) name:@"abcNotif" object:nil]; 
} 

-(void)theNotif:(UILocalNotification*)notif { 
    if([[[NSUserDefaults standardUserDefaults]valueForKey:@"flag"]isEqualToString:@"YES"]) { 
     [self performSegueWithIdentifier:@"seg1" sender:self]; 
     NSLog(@"theNotif = %@", [[notif userInfo]valueForKey:@"notif1Key"]); 
    } 
} 

Журналы в консоли

awakeFromNib 
didFinishLaunchingWithOptions 
applicationDidBecomeActive 
theNotif = notif1Value 
viewDidLoad 

Все работает отлично хотя performSegueWithIdentifier вызывается ранее до viewDidLoad и viewDidAppear. Но в некоторых сценариях это не работает. Почему это поведение. Народы также задавали тезисы диссертаций Why doesn't performSegueWithIdentifier work inside viewDidLoad?

ответ

0

Главное, чтобы понять, что подклассы UIViewController загружают (создают) свое свойство представления лениво. Таким образом, viewDidLoad будет вызываться после загрузки представления, но когда это? Конечно, нормальный цикл запуска вашего приложения вызывает его в какой-то момент, добавив его в окно, но вы можете заставить его произойти раньше, сделав вызов в представлении. Попробуйте вставить [self view]; непосредственно перед вашим вызовом для выполнения функции ..., это обеспечит загрузку представления. Тем не менее, это не гарантирует, что представление было добавлено в окно, и если этого еще не произошло, я не вижу, как можно сдвинуть модальность.

+0

после вызова [само просмотр] единственное изменение - viewDidLoad вызывается перед уведомлением. Но все же, как performSegueWithIdentifier работает перед viewDidLoad и viewDidAppear? –

+0

Ну, если ваш segue нажимает другой ViewController, тогда как может viewController нажимать другой, прежде чем он окажется в самом стеке? – Jef

+0

Вот что я прошу :) –

 Смежные вопросы

  • Нет связанных вопросов^_^