2010-01-04 56 views
10

我一直在四處搜尋,但不幸的是沒有運氣。presentModalViewController in viewDidLoad on first launch

我的應用程序需要用戶登錄/註冊第一次,他或她啓動應用程序。我知道如何確定首次啓動(使用NSUserDefaults),但每當我嘗試呈現包含登錄/註冊控件的模式時,都不會發生任何事情。

這是我有:

-(void)viewDidLoad { 
    [self showLogin]; 
    [super viewDidLoad]; 
} 

-(void)showLogin {  
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"AccountView" bundle:nil]; 
    controller.delegate = self; 

    controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self presentModalViewController:controller animated:YES]; 

    [controller release]; 
} 

然而,沒有任何反應。主視圖正常加載。任何幫助是極大的讚賞。代替

-Giles

回答

13

[UPDATE]

通過使用簡單地固定..

-(void)viewDidAppear:(BOOL)animated 
{ 

} 

-(void)viewDidLoad 
{ 

} 

謝謝!

/白癡

+5

但它會產生問題,它每次打電話時都會打電話viewAppear ...!?! – 2013-05-22 13:07:33

7

我有同樣的問題,並最終使用viewDidAppear爲好。 viewDidAppear方法唯一的問題是,如果你加載其他UIViewControllers在頂部,然後重新顯示基地,那麼你的設置代碼被反覆調用。我最終不得不向這個視圖控制器添加一個布爾值(初始化爲YES),並在決定做什麼之前檢查該值。希望這可以幫助別人......

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:(BOOL)animated]; 

    if(justLaunched) 
    { 
     justLaunched = NO; 
     if(settingsFileExists) 
     { 
      [self displayMainView]; 
     } 
     else 
     { 
      [self displaySetupView]; 
     } 
    } 
} 
0

而且在viewDidLoad調用,這是不是很安全:序列viewDidLoad/viewDidUnload當iPhone需要釋放一些意見,以拿回一些免費的可以在運行時發生記憶。

這種序列的副作用將是你的登錄控制器將顯示...

至於你說的viewDidAppear看起來更好,但不能簡單地把它放在你的appDidFinishedLaunchingUIApplication委託的結束?

2

如何使用performSelector:在viewDidLoad中功能afterDelay:withObject?我就是這麼做的,只有0.1秒的短暫延遲。