在模拟器中测试应用状态的保存

时间:2013-10-21 14:36:18

标签: c# ios xamarin.ios

我在测试iOS 5中保存应用程序状态时遇到问题:当我退出应用程序时,不会调用用于保存状态的重载。

以下是我如何重载保存状态的方法:

[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
    ...            
    public override bool ShouldSaveApplicationState(UIApplication application, NSCoder coder)
    {
        Data.Save(coder);
        return true;
    }

    public override void WillEncodeRestorableState(UIApplication application, NSCoder coder)
    {
        Data.Save(coder);
    }

以下是我用于退出应用程序的方法,据我所知,这些方法中的每一个都应该触发状态保存调用(但它们不会):

  • 按主页按钮
  • 致电UIApplication.SharedApplication.PerformSelector(new Selector("terminateWithSuccess"), null, 0f);
  • 调用Environment.Exit(0);(这会导致应用程序挂起)
  • UIApplicationExitsOnSuspend中将Info.plist设为true,然后按模拟器中的主页按钮

所以我的问题是:为什么没有调用保存状态的方法?

2 个答案:

答案 0 :(得分:3)

您在forums上的问题指出您使用的是iOS 5.

Apple在iOS 6中添加了状态保留。早期的iOS版本不会调用您的覆盖。

答案 1 :(得分:1)

来自Apple文档:

  

请注意,系统会自动删除已保留的应用   当用户强制退出应用程序时的状态。删除保留状态   应用程序被杀死时的信息是一种安全预防措施。 (系统   如果应用程序在启动时崩溃,则还会删除保留状态   类似的安全预防措施。)如果你想测试你的应用程序的能力   恢复它的状态,你不应该使用多任务栏来杀死它   调试期间的app。相反,使用Xcode杀死应用程序或杀死应用程序   通过安装临时命令或手势以编程方式应用程序   按需退出。

尝试按主页按钮。