【发布时间】:2018-02-12 07:50:27
【问题描述】:
我有一个群组电子邮件应用程序,客户可以在其中在标准 iOS 撰写窗口中创建电子邮件。如果他们写了一封长电子邮件,然后切换应用程序来执行内存密集型任务,iOS 可能会关闭撰写窗口,从而丢失他们的电子邮件内容。
有没有办法防止窗口被关闭?还是一种确保 iOS 在关闭电子邮件之前将其保存到草稿的方法?
我想知道我是否没有保留我应该保留的链接?
其他人可以确认他们是否看到同样的问题吗?
【问题讨论】:
我有一个群组电子邮件应用程序,客户可以在其中在标准 iOS 撰写窗口中创建电子邮件。如果他们写了一封长电子邮件,然后切换应用程序来执行内存密集型任务,iOS 可能会关闭撰写窗口,从而丢失他们的电子邮件内容。
有没有办法防止窗口被关闭?还是一种确保 iOS 在关闭电子邮件之前将其保存到草稿的方法?
我想知道我是否没有保留我应该保留的链接?
其他人可以确认他们是否看到同样的问题吗?
【问题讨论】:
最好的方法是了解App Life Cycle on iOS。
当应用程序在后台运行时,applicationWillTerminate 方法将被调用,这是您保存电子邮件内容的选项之一。但是这个方法并不是每次都调用,它只会在你的应用没有挂起或者用户重启设备的时候调用。
一种解决方案是将这些数据保存在方法applicationDidEnterBackground 中,一旦您的应用开始在后台运行,就会调用它。并重新加载application:didFinishLaunchingWithOptions 中的数据,这允许您在应用显示给用户之前执行任何最终初始化。
【讨论】:
mailComposeController(_:didFinishWith:error:) 方法中
有没有办法防止窗口被关闭?还是一种确保 iOS 在关闭电子邮件之前将其保存到草稿的方法?
您无法阻止窗口关闭,因为 iOS 正在杀死应用程序。您可以做的是在此之前的某个时间保存电子邮件。由于用户显然无法在应用程序处于后台时修改电子邮件,因此在应用程序进入后台时保存消息将是一个不错的选择。这样,如果 iOS 确实终止了应用程序,您将保存数据,并且您可以检查应用程序启动时是否有需要恢复的已保存消息。
但是,如果您采用这种方法,您还必须想办法帮助用户返回他们保存的消息,这意味着您还需要首先跟踪他们是如何到达那里的所以你可以重新创建那个状态。如果它只是一条简单的消息,也许您需要做的就是打开一个消息编辑器视图并使用保存的消息进行设置。不过,总的来说,这可能是一个棘手的问题。幸运的是,Apple 提供了一个很好的解决方案...
iOS 视图控制器编程指南 有一个名为 Preserving and Restoring State 的部分,它解释了如何设置应用程序以自动保存和恢复其状态。通过相对较少的工作,您可以设置您的应用程序,以便用户甚至不会注意到应用程序已重新启动——如果他们在 iOS 杀死它后启动它,应用程序将重新创建视图控制器,使其看起来就像应用程序一直在运行一样,即使设备在此期间被关闭。
【讨论】: