应用程序启动时iPhone下载/解析xml文件?

时间:2011-12-05 21:13:21

标签: iphone xml background download

我正在开发一个故事板应用程序,其中一个标签视图是一个mapView,它从服务器上的xml文件中下载点。每次启动应用程序并选中选项卡栏控制器中的选项卡时,下载文件并解析它需要一秒钟。更糟糕的是,如果无法访问互联网,应用程序崩溃:/

我想尝试在应用程序的启动画面中使用我的getDataService(下载和解析)而不是在viewcontroller的ViewDidLoad上(这是在didFinishLaunchingWithOptions下的appdelegate中吗?)然后让它做它的事情,或者在后台,并在应用程序关闭时继续在后台工作。

然后我希望将数组保留以供将来使用(这与字典有关吗?)并且只在应用程序完全重新启动时重新下载并解析xml。

我该怎么办?如果有人有教程和示例的示例或链接来做这些事情,我将非常感激。我一直在寻找,但我不知道该搜索什么。

3 个答案:

答案 0 :(得分:1)

实际上在didFinishLaunchingWithOptions期间不要这样做:

原因是iOS会杀死任何需要很长时间才能加载的应用程序。我没有相关的文档,但iOS希望你的应用程序在特定的时间段内完成启动(我相信它大约是3秒左右),如果这个方法没有在那段时间内完成你的应用程序被视为挂起,iOS将杀死它。

推荐的技术是,如果你有长时间运行的代码,就要用它上面的代码启动一个后台线程。

整个想法是尽快让用户进入可用的界面。请注意,调试器会禁用iOS的kill功能,它仅在您的代码位于设备上时才有效,并且您无法以编程方式禁用它。所以你的代码在开发时看起来很好,但是当你真正运行它时会失败。

如果您需要在加载时显示某些内容,我建议将长时间运行的代码放在后台线程上并继续进行临时视图,该视图基本上是启动画面的副本。然后,当您的数据可用时,请加载您的界面。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

制作显示应用启动时间(在Default.png启动画面之后)的第一个屏幕是相同或非常相似的图像,但是向用户提供有关正在发生的事情的反馈 - 例如UIActivityIndicator

如果您的应用在没有互联网连接的情况下启动时没有正常失败,Apple将拒绝它。在这种情况下显示相关消息,告知用户以下任何一种情况:

1)没有互联网连接,因此此应用的功能可能有限

2)没有互联网连接,这个应用程序无法正常运行