【问题标题】:download files when user press back or close the app and restart the app in iOS当用户按下或关闭应用程序并在 iOS 中重新启动应用程序时下载文件
【发布时间】:2015-07-20 11:08:29
【问题描述】:

我对 iOS 很陌生,我想从 iOS App 中的服务器下载数据库。当我在模拟器中从 Xcode 运行应用程序时,它第一次完美运行。

下载完成后,我按command+shift+H打开主屏幕,因为没有主页/返回按钮在模拟器中。我再次打开应用程序,但这次没有下载数据库。

我将下载代码保存在viewWillAppearviewDidLoad 中,并同时下载数据库两次。

我的目的是在用户恢复/重新启动应用程序时下载文件。我在 android 中做过同样的事情,其中​​onResume/onPause/onRestart 方法可用。我也想在 iOS 上实现同样的目标。

一个疑问......

  1. 如何在 iOS 模拟器中按下返回键?

我认为后退按钮从开始(至少在 android 中)而不是主页按钮启动应用程序。如何在 iOS 模拟器中进行测试。

【问题讨论】:

  • 我想建议一种替代解决方案,因为您所说的那个听起来很糟糕。为什么不在用户打开应用程序时下载数据库并缓存该数据,存储上次下载的数据。每次进行更改时,都会在数据库中添加最后更新字段。因此,当用户重新启动应用程序时,您可以根据数据库检查本地存储的数据,如果数据库中的最后一次更新是在本地最后一次更新之后,则下载新数据。这将节省网络使用量,总体上提供更好的用户体验,因为它会更快。
  • 另外,我可能会在某个地方的应用程序委托中使用它来检查应用程序何时启动,而不是在viewWillAppear 和/或viewDidLoad 中。可能在application:didFinishLaunchingWithOptions:
  • 我计划做同样的事情......但现在我只想测试应用程序在恢复或重新启动时是否下载数据......应用程序:didFinishLaunchingWithOptions 当用户调用它时关闭应用程序并再次重新启动或恢复它。
  • 这完全取决于您如何完成您的应用程序。如果你已经这样做了,它永远不会在后台运行,并且总是像一个新实例一样启动,那么是的,application:didFinishLaunchingWithOptions 总是会被调用。但是,如果您的应用可以进入后台模式并从关闭的位置启动,那么并不总是会调用它,您需要查看applicationDidBecomeActive: 之类的内容,以便在它激活时捕获它。

标签: ios objective-c iphone


【解决方案1】:
  • 如果您确实需要每次在视图显示时下载数据(我真的不推荐这样做),请从viewDidLoad 中删除下载代码并保留viewWillAppear.

  • command+shift+H 是在模拟器上按下主页按钮的正确方式。

【讨论】:

    【解决方案2】:

    您必须处理应用程序状态。请参阅以下来自苹果的文档-

    https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html

    处理那些来自 appDelegate 或

    您可以通过添加如下观察者来处理这些问题

    [[NSNotificationCenter defaultCenter]addObserver:self
                                             selector:@selector(backgroundMethod)
                                                 name:UIApplicationDidEnterBackgroundNotification
                                               object:nil];
    [[NSNotificationCenter defaultCenter]addObserver:self
                                                selector:@selector(foregroundMethod)
                                                    name:UIApplicationDidBecomeActiveNotification
                                                  object:nil];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      相关资源
      最近更新 更多