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