2010-01-04 39 views
10

Tôi đã tìm kiếm xung quanh nhưng tiếc là không có may mắn.presentModalViewController trong viewDidLoad khi khởi chạy lần đầu tiên

Ứng dụng của tôi yêu cầu người dùng đăng nhập/đăng ký lần đầu tiên họ khởi chạy ứng dụng. Tôi biết làm thế nào để xác định khởi động đầu tiên (sử dụng NSUserDefaults) nhưng bất cứ khi nào tôi cố gắng trình bày các phương thức có chứa các điều khiển đăng nhập/đăng ký, không có gì xảy ra.

Dưới đây là những gì tôi có:

-(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]; 
} 

Tuy nhiên, không có gì xảy ra. Chế độ xem chính chỉ tải như bình thường. Bất kỳ trợ giúp nào cũng được đánh giá rất cao.

-Giles

Trả lời

13

[UPDATE]

cố định đơn giản bằng cách sử dụng ..

-(void)viewDidAppear:(BOOL)animated 
{ 

} 

thay vì

-(void)viewDidLoad 
{ 

} 

Cảm ơn bạn!

/ngu ngốc

+5

nhưng nó sẽ tạo ra vấn đề, nó gọi mỗi khi xem thư của bạnAppear ...!?! –

7

tôi đã cùng một vấn đề và kết thúc bằng viewDidAppear là tốt. Vấn đề duy nhất với cách tiếp cận viewDidAppear là nếu bạn tải UIViewControllers khác lên trên, sau đó reshow cơ sở, sau đó mã thiết lập của bạn được gọi là hơn và hơn. Cuối cùng tôi phải thêm một giá trị boolean (khởi tạo là YES) vào bộ điều khiển khung nhìn này và kiểm tra giá trị đó trước khi quyết định phải làm gì. Hy vọng điều này sẽ giúp người ...

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

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

Và cách gọi này trong viewDidLoad không phải là rất an toàn: chuỗi viewDidLoad/viewDidUnload có thể xảy ra trong thời gian chạy khi iPhone cần phải phát hành một số quan điểm để có được trở lại một số miễn phí ký ức.

Các tác dụng phụ của chuỗi đó sẽ là điều khiển đăng nhập của bạn sẽ được hiển thị ...

Như bạn nói các viewDidAppear trông tốt hơn nhưng không đơn giản là đặt nó ở phần cuối của appDidFinishedLaunching các đại biểu của UIApplication của bạn?

2

Cách sử dụng performSelector: withObject: afterDelay trong hàm viewDidLoad? Đó là cách tôi làm điều đó, với một sự chậm trễ ngắn 0.1s.

Các vấn đề liên quan