我正在开发一个故事板应用程序,其中一个标签视图是一个mapView,它从服务器上的xml文件中下载点。每次启动应用程序并选中选项卡栏控制器中的选项卡时,下载文件并解析它需要一秒钟。更糟糕的是,如果无法访问互联网,应用程序崩溃:/
我想尝试在应用程序的启动画面中使用我的getDataService(下载和解析)而不是在viewcontroller的ViewDidLoad上(这是在didFinishLaunchingWithOptions下的appdelegate中吗?)然后让它做它的事情,或者在后台,并在应用程序关闭时继续在后台工作。
然后我希望将数组保留以供将来使用(这与字典有关吗?)并且只在应用程序完全重新启动时重新下载并解析xml。
我该怎么办?如果有人有教程和示例的示例或链接来做这些事情,我将非常感激。我一直在寻找,但我不知道该搜索什么。
答案 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)没有互联网连接,这个应用程序无法正常运行