2013-08-17 2 views
0

EDIT : 왼쪽에 하나의 질문 남기기 - 네비게이션 컨트롤러에서 제시 한 VC가 제대로 끝나기 전에 메소드를 호출하지 않도록하는 법.파일을 수락 할 때 올바른 ViewController가로드되도록하려면 어떻게해야합니까?

편집 : An useful tutorial in doing pretty much what I want, but not quite.

그래서 난이이 설정

초기 VC -> 탭 컨트롤러 -> (세 VC의, 그들 중 하나 ...) NavController 포함 된 파일 목록 -> 파일 편집기

언제든지 응용 프로그램을 가져올 수 있습니다. handleOpenUrl 메시지는 사용자가 파일 (예 : 전자 메일의 첨부 파일)을 편집하려고한다고 내 응용 프로그램 대리인에게 보냈습니다. 내 응용 프로그램의 상태에 따라 이러한 VC 중 일부 또는 전부가로드 될 수 있습니다. URL에 민감하게 반응하기 위해서는 최소한 NavController를로드해야합니다.

실제 목표는 NavController가로드 된 상태에서 현재 액티브 컨트롤러를 얻는 것이므로 AppDelegate에서 AppDelegate에서 처리 된 파일을로드하라는 메시지를 보낼 수 있습니다.

So : 여기서 가장 좋은 방법은 무엇입니까?

편집 그래서 내가 조금 주위를 연주하고, 지금까지이있어 :

내가 루트 VC는 UITabBarController가, 그리고 항상로드 것을 알고있다.

나는 내있는 navigationController 내가 그 중 하나 NC를로드 한 것을 알고, 또는 내가 탭

로 전환 그래서 알고리즘은 다음의 경우 필요에 따라 그렇게 할 것 2

인덱스 것을 알고 : 루트 탭바 VC 잡아. 이미 없으면 탭 2로 전환하도록 알려주십시오. 탭 2에서 NavigationController를 잡아라. root로 pop하고 무엇을해야하는지 말해라.

이제는이 코드에서 Navigation 컨트롤러의 루트 VC에서 호출 한 작업은 NC에 의해 현재 제시된 VC가 viewWillDisappear를 변경하기 전에 수행됩니다.

UITabBarController *root = (UITabBarController*) self.window.rootViewController; 
if (root.selectedIndex != 2) { 
    root.selectedIndex = 2; 
}; 
UINavigationController *nc = root.viewControllers[2]; 
[nc popToRootViewControllerAnimated:YES]; 
NSObject<SGPTFileManagerViewProtocol> *fileManager = (NSObject<SGPTFileManagerViewProtocol> *) nc.visibleViewController; 

// Whoops! This method is invoked before the navigation controller is done popping a presented view controller! 
[fileManager METHOD-FOR-HANDLING-THE-URL-HERE]; 

답변

0

음, 다소 까다롭기 때문에 랙 솔루션을 사용할 필요가 없습니다.

까다로운 이유는 간단합니다. 외부인이 앱 상태를 열린 URL에 어떻게 응답 할지를 알 수있는 방법이 없기 때문에 프레임 워크를 사용할 방법이 없습니다. 당신은 인트로 스펙 션의 기본 도구들, 뷰 계층 구조 등을 가로 지른다.

유용한 팁 : 실제로 장치에서 URL을 여는 프로세스를 디버깅 할 수있다. 디버그 프로필로 이동하여 앱이 수동으로 시작될 때까지 기다리도록 설정합니다. 귀하의 이메일 또는 아무 것도 갈 수 없어 링크를 호출하고 디버거가 귀하의 응용 프로그램이 시작되면서 시작됩니다.

XCode 5 : 제품 -> 구성표 -> 구성표 (실행 계획)에서 시작 옵션 선택 "수동 대기 시작 대기