2014-04-22 2 views
1

나는 UINavigationController를 가지고 있으며, 여기에 내 애플리케이션에 대한 로그인 프로세스를 제어하는 ​​rootView를로드한다.appDelegate에서 rootViewController를 다시로드하는 방법

최근 로그 아웃 요청에 대한 내 설정 번들을 확인하는 응용 프로그램 대리인에게 코드를 추가했습니다.이 로그 아웃 요청이 발생하면 로그인 허드를로드하도록 rootView를 다시로드하거나 내부에서 메서드를 호출하고 싶습니다. 로그인 허드 (hud)를 보여주는 rootView.

이 내가 rootViewController를 다시로드 할 수있는 방법이 알고 싶습니다 무엇 내 AppDelegate에

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window.rootViewController = self.navigationController; //Adds RootViewController to the NavigationController interface 
    // etc 
} 

내부에있는 navigationController에 대한 rootView을 설정하는 방법입니까? 또는 응용 프로그램 대리자 내부에서 메서드를 호출 할 수 있습니까?

+0

다른 컨트롤러에서 메서드를 호출하려면 위임 패턴, 대상/동작 패턴 또는 알림 패턴을 사용할 수 있습니다. 특히 iOS/OS X에서 어떤 것이 가장 잘 작동하는지 알아보기 위해 iOS를 사용하고 있지만 OS X에서는 동일하고 더 나은 문서가 제공됩니다. –

답변

2

그것은 할 수 있지만 복잡합니다. 가능한 경우이를 피하는 것이 가장 좋습니다. 특정 요구 사항은 모든 앱마다 다를 수 있습니다. 앱의 소스 코드를 보지 않아도 어떻게 완료되었는지 말할 수는 없습니다.

기본 프로세스는보기에서 모두 제거하고 모든 참조를 nil로 설정 한 다음 코드 또는 펜촉을 다시로드하여 다시 작성해야합니다.

더 나은 옵션은 rootViewController의 위치를 ​​그대로두고 맨 위에 모달 로그인보기 컨트롤러를 제공하는 것입니다. 사용자가 로그인하면 루트보기 컨트롤러가 관찰 할 수있는 NSNotification을 보내고 데이터를 채 웁니다.

로그인 컨트롤러를 숨기려면 알림이 전송 될 때까지 기다렸다가 로그인 관련 네트워크 작업을 수행하는 동안 루트보기 컨트롤러가 주 스레드를 차단하도록하십시오. 이렇게하면 로그인보기 ("logging in ... "메시지)는 루트보기가 완전히 채워질 때까지 계속 표시됩니다.

+0

좋아요 ..이 복용량은 좀 더 이해가됩니다 .. 답장을 보내 주셔서 감사합니다. – HurkNburkS

+0

어려운 부분은 모든 참조를 nil로 설정하는 것입니다. 당신이 모를 수도있는 것을 포함하여 많은 참고 자료가 있습니다. –

+0

맞아요. 로그 인/아웃 전용 뷰가있는 것이 가장 현명한 방법이라고 생각합니다. 내가 처음으로 루트보기에 구현 한 이유는 사용자에게 로그인 화면을 다시 보여줄 수는 없기 때문이며 또한이 제한이 있다는 것을 알지 못했기 때문입니다. – HurkNburkS

관련 문제