Ios watchOS 3应用程序在点击后重新启动

Ios watchOS 3应用程序在点击后重新启动,ios,swift,watchkit,apple-watch-complication,watchos-3,Ios,Swift,Watchkit,Apple Watch Complication,Watchos 3,我有一个简单的“定时器”watchOS应用程序,它使用分层导航。我可以按digital crown返回到watch Springboard,然后点击应用程序图标并返回到我使用的同一界面控制器 如果我回到手表界面并点击我的应用程序的复杂部分,应用程序将启动,但似乎已经重新启动:我失去了当前状态。有什么方法可以防止这种情况发生吗?听起来你好像在问如何阻止你的应用程序被换出内存 如果是这样的话,就像在iOS上一样,这是不可能的——显然手表的内存比手机少,所以更可能被换掉 您需要做的是将您的状态存储在某

我有一个简单的“定时器”watchOS应用程序,它使用分层导航。我可以按digital crown返回到watch Springboard,然后点击应用程序图标并返回到我使用的同一界面控制器


如果我回到手表界面并点击我的应用程序的复杂部分,应用程序将启动,但似乎已经重新启动:我失去了当前状态。有什么方法可以防止这种情况发生吗?

听起来你好像在问如何阻止你的应用程序被换出内存

如果是这样的话,就像在iOS上一样,这是不可能的——显然手表的内存比手机少,所以更可能被换掉


您需要做的是将您的状态存储在某个持久层中(例如NSUserDefaults),这样当应用程序重新启动时,它可以重新加载其状态

如果您通过点击打开watch应用程序,应用程序将自动返回到根接口控制器。这是一种系统强制行为

如果要保留以前的状态,需要将应用程序的层次结构更改为基于页面的界面。


基于页面的界面中的用户交互可以类似于基于导航的界面。您可以将
pushController(名称:context:)
pop()
poptrootcontroller()
方法替换为
becomeCurrentPage()
。我还发现,从一个页面界面切换到另一个页面界面的速度也比从一个页面界面切换到另一个页面界面的速度快。

不,该应用程序仍在内存中。点击应用程序图标可使应用程序恢复。点击该按钮将重新启动它。我看到我的应用程序的前一个(内存中)状态的简短闪现,然后它加载根接口控制器。然而,你关于UserDefaults的建议很好。我可能会最终实现它。“flash”可能是系统在其先前状态下拍摄的屏幕快照。当然,这款手表的速度非常慢(与手机相比),所以你可以经常看到快照和应用程序重新加载之间的连接