2011-12-05 2 views
0

나는 그 중 하나가 탭이있는 스토리 보드 응용 프로그램에서 서버의 xml 파일에서 포인트를 다운로드하는 mapView입니다. 앱이 시작되고 탭 막대 컨트롤러의 탭이 선택 될 때마다 파일을 다운로드하고 파싱하는 데 1 초가 걸립니다. 더 나쁜 여전히, 인터넷에 대한 액세스가없는 경우 응용 프로그램이 충돌합니다 :/iPhone 앱 다운로드시 XML 파일을 다운로드/구문 분석 하시겠습니까?

내가보기 getController의 ViewDidLoad 대신에 애플 리케이션의 스플래시 화면에서 내 getDataService (다운로드 및 구문 분석)를 사용하려고합니다 (이것을 didFinishLaunchingWithOptions 아래 appdelegate에 넣었습니까?) 그리고 그 일을 백그라운드에서 수행하거나 앱이 닫히면 백그라운드에서 계속 작업하십시오.

다음 배열을 향후 사용을 위해 보존하려면 (사전과 관련이 있습니까?) 응용 프로그램이 완전히 다시 시작될 때만 XML을 다시 다운로드하고 구문 분석하십시오.

어떻게하면됩니까? 누구든지 이러한 예제를 수행하는 자습서 및 예제에 대한 예제 또는 링크가있는 경우 매우 감사하게 생각합니다. 나는 잠시 동안을 찾고 있었지만 무엇을 검색해야할지 모르겠습니다.

답변

1

사실 didFinishLaunchingWithOptions 동안이 작업을 수행하지 마십시오 :

이유는 아이폰 OS를로드하는 데 시간이 너무 오래 걸리는 모든 응용 프로그램을 죽일 것입니다. 나는 관련 문서가 없지만 iOS는 특정 기간 내에 앱이 시작될 것으로 예상합니다 (약 3 초 정도라고 생각합니다). 그리고이 방법이 해당 시간 내에 완료되지 않으면 앱이 간주됩니다. 매달아서 아이오이가 죽일거야.

장기간 실행되는 코드를 사용하는 경우 코드가있는 백그라운드 스레드를 시작하는 것이 좋습니다.

전체 아이디어는 최대한 빨리 사용자 인터페이스를 사용할 수있게하는 것입니다. 디버거가 iOS의 kill 기능을 사용 중지합니다. 코드가 기기에 있고 프로그래밍 방식으로 사용 중지 할 수없는 경우에만 활성화됩니다. 따라서 코드를 개발할 때는 괜찮아 보이지만 실제로 실행하면 실패하게됩니다.

로드하는 동안 표시해야 할 경우 장기 실행 코드를 백그라운드 스레드에 배치하고 기본적으로 스플래시 화면의 복사본 인 임시보기를 계속 사용하는 것이 좋습니다. 데이터를 사용할 수있게되면 인터페이스를로드하십시오.

0

AppDelegate applicationDidFinishLoading 함수에서이 작업을 수행하고 AppDelegate에 대해 정의한 속성에 할당하면 데이터를 다운로드하고 파싱하는 동안로드하는 화면이 계속 표시됩니다.

- (BOOL)application:(UIApplicatioN *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    NSLog(@"loading!"); 
    sleep(5); //delay to show you that the log happens before the loading screen goes away 
    return YES; 
} 
0

앱이 시작될 때 (Default.png 스플래시 화면 이후) 표시되는 첫 번째 화면을 동일하거나 매우 유사한 이미지로 만듭니다. 그러나 사용자 피드백에 어떤 일이 일어나고 있는지 사용자에게 알려줍니다. a UIActivityIndicator.

인터넷에 연결하지 않아도 앱이 정상적으로 작동하지 않을 경우 Apple에서 거부합니다. 이 중 하나와 같은 사용자 뭔가 조언이 상황에서 관련 메시지 표시 :

1) 인터넷에 연결되어 있지 않음 때문에이 응용 프로그램의 기능을

2) 인터넷에 연결 및이 응용 프로그램을 제한 할 수는없는 것이다 그것과 함께 기능

관련 문제