2011-12-04 4 views
0

우리는 탭 막대 + 탐색 제어 프로젝트를 가지고 있습니다. 우리는 인터페이스 빌더를 통해 탭 바를 만들고 인터페이스 빌더를 통해 모든 탭 항목을 탭 바 컨트롤러에 추가했습니다. 우리의 응용 프로그램에는 초기에 모달 형식으로 표시되는 로그인 화면이 있습니다. 사용자가 인증되면 로그인 화면이 닫히고 (dismissModalScreen 사용) MainWindow가 표시됩니다. 이것은 모두 정상적으로 작동합니다.iPhone 응용 프로그램의 로그 아웃시 tabbarcontroller보기 새로 고침

이제 로그 아웃 옵션을 클릭하면 로그인 화면이 다시 표시됩니다. 우리는 그것을 보여줄 수 있습니다. 그러나 문제는 사용자가 다시 인증되면 모든 화면이 새로로드되기를 바랍니다. 현재 모든 화면은 상태를 유지하고 이전 데이터를 유지합니다. 우리가해야 할 시도 무엇

은 다음과 같습니다

[AppDelegate에 tabBarController 자료]

AppDelegate.tabBarController = nil;

우리는 tabBarController를 해제하고 nil로 설정하려고했습니다. 그러나보기가 표시되면 우리는 탭을 선택할 수 없으며보기는 공백입니다.

우리가 필요한 것은 :

두 번째로 사용자가 로그인 일단 해제하고 TabBar의의 일부입니다 각각의 ViewController를 다시로드하는 방법에 대해 설명합니다.

도움을 주시면 대단히 감사하겠습니다.

답변

0

탈출구를 발견했습니다. 지금 우리가하고있는 일은 사용자가 다시 로그인하면 뷰 컨트롤러를 해제하고 다시 생성 한 다음 다시 uitabbar로 설정하는 것입니다.

NSMutableArray * arrControllers = [[AppDelegate.tabBarController.viewControllers] mutablecopy]; [arrControllers removeAtIndex : 3]; [arrControllers removeAtIndex : 2];

---- 새로 만들기 컨트롤러

의 UIViewController viewController2 = [UIViewController에 ALLOC] initWithNibName "viewController2"번들 @ 닐] 오토 릴리즈];

UIViewController viewController3 = [[UIViewController alloc] initWithNibName : @ "viewController3"번들 : nil] autorelease];

--create 탐색 컨트롤러

UINavigationController가 navViewController2 = [[[UINavigationController가 된 ALLOC] initWithRootViewController : viewController2] 오토 릴리즈];

UINavigationController navViewController3 = [[[UINavigationController alloc] initWithRootViewController : viewController3] autorelease];

[arrControllers addObject : navViewController2];

[arrControllers addObject : navViewController3];

[AppDelegate.tabViewController setViewControllerers : arrControllers];

이 변경 후에도 정상적으로 작동합니다.

우리가 배열에서 모든 객체를 릴리스하면 문제가 발생했습니다. 우리는 carsh를 얻습니다. 그것은 allObjects를 릴리즈 할 때 RootViewController 인 첫 번째 컨트롤러가 출시되기 때문입니까?

감사합니다.