2013-05-02 56 views
9

Ứng dụng iOS của tôi mở ra với lời nhắc đăng nhập. Sau khi người dùng đăng nhập, nó sẽ chuyển sang chế độ xem chính.Phân bổ lại RootViewController sau khi đăng nhập thành công

Trong ứng dụng: didFinishLaunchingWithOptions, tôi đặt RootViewController thành LoginViewController. Các LoginViewController có appdelegate như đại biểu của nó:

LoginViewController *login = [[LoginViewController alloc] init]; 
[login setDelegate:self]; 
[[self window] setRootViewController:login]; 

Nếu đăng nhập thành công, LoginViewController gọi phương thức userDidLogin của appdelegate:

if([[self delegate] respondsToSelector:@selector(userDidLogin)]) { 
    [[self delegate] userDidLogin]; 
} 

userDidLogin tạo ra một UINavigationController mới và gán nó như là RootViewController:

- (void)userDidLogin 
{ 
    MainRecordViewController *mainRecordViewController = [[MainRecordViewController alloc] init]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mainRecordViewController]; 
    [[self window] setRootViewController:navController]; 
} 

Bằng cách thêm NSLog vào phương thức dealLoc của LoginViewController, có vẻ như LoginViewControl ler bị phá hủy ở giai đoạn đó và việc thực hiện tiếp tục như mong đợi.

Tôi chưa làm gì để đóng LoginViewController một cách rõ ràng, chỉ dựa vào giả định rằng gán một RootViewController mới sẽ có nghĩa là cái cũ biến mất và được dọn dẹp bởi ARC.

Tôi có thể dựa vào điều đó luôn xảy ra không? Đây có phải là cách tiếp cận hợp lý không?

Xin cảm ơn trước.

James

+1

Lưu ý phụ: Nếu bạn không chắc chắn những gì và những gì không được ARC phát hành, bạn có thể triển khai phương thức dealloc và in một cái gì đó như NSLog (@ "Ví dụ của MySuperDuperClass đã được ARC phân phối"). – Groot

+0

Cảm ơn - Tôi đã làm điều đó. Đó là những gì tôi có nghĩa là "Bằng cách thêm một NSLog vào phương pháp dealloc ...". Khung nhìn xuất hiện để đóng một cách chính xác, và có vẻ như nó luôn luôn được deallocated - nhưng tôi đã tự hỏi liệu tôi có thể dựa vào đó luôn luôn làm việc. Tôi nghi ngờ nó là tốt, nhưng nó cảm thấy giống như một giả định rằng có thể đi sai ... – James

Trả lời

11

Các documentation của các bang rootViewController tài sản:

Nếu cửa sổ có một hệ thống phân cấp xem hiện tại, quan điểm cũ là loại bỏ trước khi mới được cài đặt.

Vì vậy, nếu bạn không giữ tham chiếu của mình đến LoginViewController, nó sẽ bị hủy.

Có lẽ điều này: RootViewController Switch Transition Animation cũng rất thú vị đối với bạn, vì nó mô tả cách chuyển bộ điều khiển chế độ xem gốc bằng hoạt ảnh.

+1

Tôi thích điều đó - một câu trả lời, cộng với một sự tinh tế thẩm mỹ. Nhiều đánh giá cao. – James

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