0

나는 몇 시간 동안이 문제를 해결하려고 노력해 왔습니다. 나는 도처에서 수색 해 왔고 내 문제에 대한 해결책을 찾을 수없는 것 같습니다. 나는 여기에 핵심 개념이 부족하다는 것을 확신한다.modalViewController를 가져 오는 데 문제가 있습니다.

내 AppDelegate에 (didFinishLaunching는) 기본적으로 내 창을 설정하고 호출 RootViewController는 :

 
// create our window 
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
[window setBackgroundColor:[UIColor blackColor]]; 

// create our rootviewcontroller 
RootViewController *controller = [[RootViewController alloc] init]; 

// add our rootviewcontroller's view to our window 
[window addSubview:controller.view]; 

// controller is now owned by window's view 
[controller release]; 

// show us to the world 
[window makeKeyAndVisible]; 

나는 윈도우의 서브 뷰으로 controller.view을 추가, 나의 이해는 RootVC의에는 loadView가 자동으로 호출되는 것입니다.

RootVC loadView에서 navigationController가있는 각 탭에 tabBarController를 만들고 자체 viewController를 만듭니다. 모두 잘 작동합니다.

RootVC viewDidLoad에서 사용자가이 앱을 처음 실행하는지 확인하고, 그렇다면 모달 시작 화면을 표시하고 싶습니다. 이것이 내가 문제가되는 부분입니다.

나는이와 내가 원하는 것을 달성 할 수있을 것입니다 이상적 RootVC의 viewDidLoad에 방법에서 많은 코드를 유지, 그리고 것 :

 
WelcomeViewController *welcome = [[WelcomeViewController alloc] init]; 
[self presentModalViewController:welcome animated:true]; 
[welcome release]; 

분명히이 작동되지 않습니다. WelcomeVC의 loadView는 뷰 속성을 명시 적으로 설정하지 않았기 때문에 아직 실행되지 않았습니다. WelcomeVC의 init 메소드를 사용하여 self.view를 사용하여 다양한 솔루션 (welcome.view - [[UIView ....])을 가지고 놀았지만, 그 모달을 팝업 할 수없는 것 같습니다.

내가 원하는 것을 어떻게 성취해야합니까? 모범 사례는 무엇이며 내 코드를 단단하고 깔끔하게 유지하는 가장 좋은 솔루션은 무엇입니까?

내 솔루션이 계속해서 내 앱을 개발할 수 있도록 노력하겠습니다.

+0

질문과 관련이 없지만 [window addSubview : controller.view]가보기 컨트롤러를 유지하지 않을 것이라고 생각합니다. – MHC

+0

@MHC - 자세히 설명해 주시겠습니까? 왜 그렇게 생각하니? 나는 뷰가 서브 뷰를 추가 할 때마다 그 서브 뷰가 유지 될 것이라고 생각했다. – djibouti33

+0

하위 뷰는 유지되지만 뷰 컨트롤러는 유지되지 않습니다. – MHC

답변

1

문제가 그렇게 간단하지는 않지만 해결 방법은 있습니다. 기본보기가 나타날 때까지 기다려야합니다. 따라서 조건을 확인하고 방법으로 모달보기를 제시하십시오. viewDidLoad 방법이 아닙니다.

+0

내 코드에는 다른 문제가 있지만, 해결해야 할 마지막 문제는 해결책이었습니다! 기본보기가 표시 될 때까지 기다리는 이유는 무엇입니까? 이 문서는 어디에서나 명시되어 있습니까? – djibouti33

+0

Apple의 문서에서 '현재보기 컨트롤러'에서'presentModal ... '메서드를 사용한다고 말하는 것은'종류 '입니다. 하지만 내가 아는 한 '현재보기 컨트롤러'는 어디에도 정의되어 있지 않습니다. 그러나 그것의 행동 (모달 표현 된 뷰는 제시하는 뷰의 맨 위에있다)에 대해 생각할 때, 제시되는 뷰는 아마도 자신의 관점의 슈퍼 뷰와 함께 작동 할 것이다. 따라서 다른 뷰 컨트롤러를 모달로 표시하려면 자체 뷰를 뷰 계층에 올바르게 삽입해야합니다. – MHC