2011-12-05 47 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)没有互联网连接,而这个应用程序不会功能与它

相关问题