2011-02-16 5 views
2

저는 iPhone 응용 프로그램 개발에 초보자이며 스플래시 화면이있는 응용 프로그램을 만들려고합니다. 내 앱이 웹에서 xml 파일을로드해야하기 때문에 스플래시 화면이 필요합니다. 이 동안 앱에 스플래시 화면 (로고 + 메시지 "loading XML ...")이 표시되어야하며로드가 완료되면 기본 화면으로 진행해야합니다.iphone dev : 스플래시 화면의 tabbar 컨트롤러 + modalviewcontroller

스플래시 화면 이후에 표시해야하기 때문에 탭바 템플릿으로 앱을 시작했습니다. 첫 번째 탭에는 스택에 사용자 정의보기 컨트롤러 (searchViewController.h/.m/.xib라고 함)를로드하는 탐색 컨트롤러 (IB로 구성)가 있습니다.

내 문제 : 내 앱을 실행하면 화면이 오랫동안 검은 색으로 유지되고 그 다음에 스플래시 화면이 표시되거나 (화면이 아래로/사라짐에 따라) 표시되며 다른 첨부 된보기가있는 탭바가 나타납니다. 가 표시됩니다. 그러나 화면이 검게 보이지만 콘솔에서 XML 구문 분석의 NSLog 메시지를 볼 수 있습니다.

이것은 앱 시작, XML 가져 오기, XML 파싱, 약 1ms 동안 스플래시 화면 표시 후 기본 앱 표시를 의미합니다. 하지만 XML 추출 및 파싱 중에 이미 스플래시 화면을 표시하고 싶습니다.

내 AppDelegate.m

:

#import "AppDelegate_iPhone.h" 
#import "startPage.h" 

@implementation AppDelegate_iPhone 

@synthesize window; 
@synthesize tabBarController; 
@synthesize theVendors; 
#pragma mark -#pragma mark Application lifecycle 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: 
    (NSDictionary *)launchOptions { 

     [window addSubview:tabBarController.view]; 

     //initialise the splash screen from class startPage as loadingPage 
     startPage *loadingPage = [[startPage alloc] init]; 

     //present splash screen as modalview of the tabbar controller    
     [self.tabBarController presentModalViewController:loadingPage animated:NO]; 

     //make the hole thing visible (should be visible, but isn't (that's the problem)) 
     [self.window makeKeyAndVisible]; 

     //call the splash-screen controller for doing the XML work 
     [loadingPage initVendors]; 
     [loadingPage release]; 

     return YES; 
} 

지금은 XML 물건에 대한 spash와 스크린 방법 :

-(void)initVendors{ 
    vendors *theVendorsLocal = [[vendors alloc] initWithDictionary]; 
    NSURL *xmlURL = [NSURL URLWithString:@"http://.../muuhh.xml"]; 

    fParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [fParser setDelegate:theVendorsLocal]; 
    [fParser setShouldProcessNamespaces:NO]; 
    [fParser setShouldReportNamespacePrefixes:NO]; 
    [fParser setShouldResolveExternalEntities:NO]; 
    [fParser parse]; 
    [xmlURL release]; 



if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){ 
    //AppDelegate_iPad *del = (AppDelegate_iPad *)[UIApplication sharedApplication].delegate; 
    //del.theVendors = theVendorsLocal; 
}else{ 
    AppDelegate_iPhone *del = (AppDelegate_iPhone *)[UIApplication sharedApplication].delegate;  
    del.theVendors = theVendorsLocal; 
} 

    //detach the modalview from the tabbar controller 
[self.parentViewController dismissModalViewControllerAnimated:YES]; 
} 

때문에 문제가 전체 파싱 물건이 시작하기 전에 수행된다 screnn이 표시됩니다.

왜 ??

당신이 볼 수 있듯이, 나는의 tabbarcontroller.view로드, 윈도우의 하위 뷰를 같이 넣어 modalview를 설정하고 수행 [makeKeyAndVisible self.window] 내가 전화 전에 [loadingPage initVendors] 메소드 ...

전체 구문 분석 작업 후에 스플래시 화면이 표시되는 이유는 무엇입니까 (사실 실제로 표시되지는 않습니다. 어떤 도움

덕분에 ...


은 내가이 매우 상단에 [makeKeyAndVisible self.window] 이동하려고했으나 결과는 여전히 동일합니다 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    breakpoint1 -> [self.window makeKeyAndVisible]; 
    breakpoint2 -> [window addSubview:tabBarController.view]; 

    //initialise the splash screen from class startPage as loadingPage 
    breakpoint3 -> startPage *loadingPage = [[startPage alloc] init]; 

    //present splash screen as modalview of the tabbar controller    
    [self.tabBarController presentModalViewController:loadingPage animated:NO]; 

... 

I 또한 다른 준비로 주위를 둘러 보았지만 아무런 효과가 없었습니다. 마지막으로 나는 중단 점을 설정하고 NSLog를 사용하여 앱이 모든 메소드를 호출하는 방법을 보여주기 시작했습니다. 화면을 관찰하면서 [self.window makeKeyAndVisible]의 메서드 호출이 호출 직후 뷰를 표시하지 않는다는 것을 알았습니다.

위 소스 코드에서 중단 점을 표시했습니다. breakpoint1 이후에 검은 색 화면이 사라지고 흰 화면이 보이고 (창), 그 다음에 중단 점 2에서 탭바가 표시됩니다 (적어도 중단 점 3에서). 하지만 아무 일도 일어나지 않습니다. 전체 idFinishLaunchingWithOptions-method가 완료 될 때까지 화면이 검은 색으로 유지됩니다.

didFinishLaunchingWithOptions- 메서드 다음에 이라는 applicationDidBecomeActive-method에도 일부 중단 점을 배치했습니다.applicationDidBecomeActive-method의 한 중단 점에서 디버거가 중단 된 경우 화면에 아무 것도 표시되지 않더라도 screnn은 여전히 ​​검은 색으로 유지됩니다.

마지막으로 applicationDidBecomeActive-method를 종료 한 후 Tabbar가 표시됩니다.

나는 앱이 applicationDidBecomeActive 메소드를 떠난 후에 앱이 "간다"는 clou가 없습니다.

그리고 제가 알고 싶습니다. 탭바가 실제로 표시되는 위치와 시간은 언제입니까?

왜이 호출 바로 뒤에 A B의 reakpoint에서 중지하면 [makeKeyAndVisible가 self.window] 창을 표시하지 않습니다합니까?

답변

0

은 내가 tabbarcontroller는 따라서 첨부 뷰 계층을 숨기기 때문에 창문은 여전히 ​​보이지 않는 그 시점에서, 시간에 모달 귀하되는 SplashScreen을 제시 할 수없는 생각한다. 스플래시 화면도이 계층 구조에 속합니다.

"makeKeyAndVisible"메소드를 didFinishLaunchingMethod의 시작 부분으로 이동하십시오. 그렇지 않으면 XML을 완료 한 후 - 관측하는 것처럼보기 계층 구조가 표시됩니다.

+0

조언 해 주셔서 감사합니다. 나는 [창 makeKeyAndVisible]을 넣으려고했다. 메소드를 맨 먼저 - 문제는 동일하게 유지됩니다. [loadingPage initVendors]를 호출하지 않으면; 메소드를 사용하면 앱이 더 빨리 시작되고 검은 색 화면이 표시되지 않고 모달보기가 표시됩니다. 더 이상의 제안? – dac