2011-12-05 80 views
0

我正在研究故事板應用程序,其中一個選項卡式視圖是從服務器上的xml文件下載點的mapView。每次啓動應用程序並且選中標籤欄控制器中的選項卡時,下載文件並解析它都需要一秒鐘的時間。更糟糕的是,如果沒有互聯網接入,應用程序崩潰:/iPhone下載/解析應用程序啓動時的xml文件?

我想嘗試使用我的getDataService(下載和解析)在應用程序的啓動屏幕,而不是ViewController的ViewDidLoad這是在didFinishLaunchingWithOptions下的appdelegate中?),然後讓它在後臺或後臺執行它的操作,並在應用程序關閉時繼續在後臺工作。

然後我想保留數組以備將來使用(這是否與字典有關?),並且只在應用程序完全重新啓動時重新下載並解析xml。

我該怎麼做這些事情?如果任何人有示例或鏈接教程和例子,做這些事情,我會非常感激。我一直在尋找一段時間,但我不知道要搜索什麼。

回答

1

其實並不didFinishLaunchingWithOptions中做到這一點:

的原因是,iOS將殺死的時間太長加載任何應用程序。我沒有相關的文檔,但iOS希望你的應用在特定的時間段內完成啓動(我相信它大約需要3秒左右),如果這個方法沒有在這個時間框架內完成,你的應用被視爲掛起和iOS會殺死它。

推薦的技術是,如果你有很長的運行代碼是啓動一個後臺線程與代碼就可以了。

整個想法是儘快讓用戶進入可用界面。請注意,調試器會禁用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啓動屏幕之後)是相同的還是非常相似的圖像,但會向用戶反饋正在發生的事情 - 例如,一個UIActivityIndicator

如果您的應用在沒有互聯網連接的情況下啓動時不會失敗,Apple會拒絕它。在這種情況下它會建議用戶像任一顯示相關信息:

1)沒有互聯網連接,所以這個應用程序的功能可能會受到限制

2)沒有互聯網連接,而這個應用程序不會功能與它

相關問題