【问题标题】:iPhone download / parse xml file on app launch?iPhone在应用程序启动时下载/解析xml文件?
【发布时间】:2011-12-05 21:13:21
【问题描述】:

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

我想尝试在应用程序的初始屏幕期间而不是在视图控制器的 ViewDidLoad 上使用我的 getDataService(下载和解析)(这是在 didFinishLaunchingWithOptions 下的 appdelegate 中吗?)然后让它做它的事情,或者在后台,如果应用程序关闭,则继续在后台工作。

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

我该如何做这些事情?如果有人有示例或指向执行这些操作的教程和示例的链接,我将不胜感激。我一直在寻找一段时间,但我不知道该搜索什么。

【问题讨论】:

    标签: iphone xml background download


    【解决方案1】:

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

    原因是 iOS 会终止任何加载时间过长的应用程序。我手头没有相关文档,但 iOS 期望您的应用程序在特定时间段内完成启动(我相信大约 3 秒左右),如果此方法未在该时间范围内完成,您的应用程序将被视为挂起,iOS 会杀死它。

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

    整个想法是让用户尽快获得可用的界面。请注意,调试器会禁用 iOS 的 kill 功能,它仅在您的代码在设备上时才处于活动状态,并且您不能以编程方式禁用它。因此,您的代码在开发时看起来不错,但在实际运行时会失败。

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

    【讨论】:

      【解决方案2】:

      如果您从 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;
      }
      

      【讨论】:

        【解决方案3】:

        使显示应用启动时的第一个屏幕(在Default.png 启动屏幕之后)是相同或非常相似的图像,但要向用户反馈正在发生的事情——例如UIActivityIndicator

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

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

        2) 没有互联网连接,此应用无法使用它

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-24
          • 1970-01-01
          • 1970-01-01
          • 2013-08-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多