问题标签 [state-restoration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
69 浏览

segue - 恢复 segued iOS UIViewControllers 的更好方法

我有一个 UITableViewController 显示选项列表。点击每个选项使用 segue 导航到另一个视图控制器

需要以下代码来恢复应用程序的状态。但是有更清洁的方法吗?我在列表中包含了处理两个选项的代码,但图像有 10 个选项!

我很惊讶我需要 encodeObject() 子 VC,因为它们没有嵌入(对于那些嵌入 UITabbarController 的子 VC 确实需要 encodeObject() 子)。

我主要的“不喜欢”是restoreChildIfPresent()随着更多 ViewControllers 的增加和丑陋的需求而增长forgetChildren()

0 投票
2 回答
383 浏览

ios - iOS 蓝牙状态保存和恢复的 DUPLICATE ISSUE -25299

实例化我的 CBCentralManager 时遇到问题。从 iOS 控制台监视它时,我收到“重复问题”消息(它没有显示在 XCode 控制台中)。

我尝试更新队列名称恢复密钥 ID,但没有成功。这就是我实例化中央管理器的方式:

这些是我得到的错误:

CKLs-iPhone-5S securityd [78] : securityd_xpc_dictionary_handler MyApp[2571] add 操作无法完成。(OSStatus 错误 -25299 - 重复项 O,genp,E99372E2,L,ck,X2W6M5UYJ9.com.mydomain.myapp,0,acct,svce,v_Data,20151218165347.298588Z,2CAE5650)

CKLs-iPhone-5S MyApp [2571]:SecOSStatusWith 错误:[-25299] 操作无法完成。(OSStatus 错误 -25299 - 远程错误:操作无法完成。(OSStatus 错误 -25299 - 重复项 O,genp,E99372E2,L,ck,X2W6M5UYJ9.com.mydomain.myapp,0,acct,svce,v_Data ,20151218165347.298588Z,2CAE5650))

有任何想法吗?

0 投票
1 回答
914 浏览

ios - 状态恢复仅在连接到 Xcode 时有效

我有一个运行计时器的应用程序,即使应用程序退出或手机关闭,计时器也应该继续运行。所以我正在尝试使用shouldSaveApplicationStateand来做到这一点shouldRestoreApplicationState。我将这两种方法都添加willFinishLaunchingWithOptions到了我的 appDelegate 中,并为每个涉及的视图控制器、导航控制器和标签栏控制器设置了恢复 ID。然后在我想恢复的视图控制器上,我这样做了:

现在这是奇怪的部分。当我的手机连接到 Xcode 并且我使用 Xcode 的播放和停止按钮来启动和退出应用程序时,一切正常。但是,当我在手机与 Xcode 断开连接的情况下尝试相同的操作时,就好像我根本没有设置状态恢复,应用程序完全忽略它,只显示第一个视图控制器。而且我什至无法调试,因为当我将手机连接到 Xcode 时,它​​可以正常工作。同样的事情也发生在模拟器上。如果我使用 Xcode 的按钮恢复工作。如果我只是从模拟器本身打开和关闭应用程序,它不会。

有任何想法吗?

0 投票
2 回答
570 浏览

ios - 每次都恢复状态?

我的应用程序有一个视图控制器,即使用户自己杀死了应用程序,也必须恢复它,并且shouldRestoreApplicationState不这样做;如果用户杀死了应用程序,我会回到第一个控制器。

那么有没有办法做我想做的事,每次都恢复状态?

如果状态恢复不可能做到这一点,我想也许我可以将视图控制器保存到我的持久存储中并从我的 appDelegate 中呈现它,但我还无法弄清楚。我必须从 appDelegate 重建整个导航堆栈,包括一个标签栏控制器和多个导航控制器直到该视图。这是一个好主意吗?我该怎么做呢?

我尝试了这种变化:

但我不断收到各种错误。

理想情况下,我想恢复每个视图控制器的状态,但它必须每次都发生。有没有更好的方法来做到这一点?

谢谢,

丹尼尔

0 投票
1 回答
188 浏览

ios - 为 restoreIdentifier 提供默认值

我想覆盖该restorationIdentifier变量,以便所有继承自的视图控制器MyViewController都将其restorationIdentifier设置为类名。但是,似乎 Swift 不允许我这样做。

我要重载并提供默认实现的 var 定义为:

我尝试用以下方法覆盖它:

编译器对我大喊:

restorationIdentifier带有 Objective-C 选择器 的getter与来自具有相同 Objective-C 选择器的超类的restorationIdentifiergetter 冲突 restorationIdentifierUIViewController

我该如何克服呢?

0 投票
1 回答
128 浏览

ios - 弱引用委托未恢复

AddCityViewController与相应的文本字段一起恢复。“取消”和“保存”按钮包含对代表的调用。模态视图控制器正在恢复,但“保存”和“取消”按钮未激活委托方法。所有视图控制器都在情节提要内创建。

取消按钮仅在未实现状态恢复时调用委托方法。

我希望在需要进行状态恢复时也调用代表

CityTableViewController代表AddCityTableView

...

下面的委托方法功能完美,除了状态恢复。在状态恢复期间,永远不会调用此方法。

0 投票
1 回答
311 浏览

ios - WatchOS WCSession sendMessage 唤醒杀死 iPhone 应用程序的调试和状态恢复问题

我正在尝试向我的应用程序添加简单的 WatchOS 2.0 功能,以允许在手表上触发简单的操作并在我的 iPhone 上的主应用程序中产生影响。所有这些都取决于使用 WCSession 的 sendMessage 方法从手表发送消息

到目前为止一切正常,消息已发送,消息已收到,我的应用程序反应正确。我什至可以让我的应用程序在后台运行,一切似乎仍然正常(我可以在手表上看到 iPhone 是否对消息做出反应,因为 iPhone 将更新手表连接上下文,然后反映在手表上)。我现在只想开始调试边缘情况。

我主要担心的两个问题是...

如果它被杀死,我该如何调试唤醒我的应用程序的系统。我显然无法从 Xcode 生成进程,如果我尝试附加到进程显然为时已晚,理想情况下,我希望能够尽早设置断点以查看事情是如何工作的。更糟糕的是,我可以依靠我猜测的大量日志并查看这些日志。只是想知道是否有尝试调试这种情况的好方法?

最后,关于状态恢复,在 sendMessage 被发送场景运行的这个被杀死的应用程序中会发生什么。IE。

  • 我的应用程序在特定状态下运行应用程序 (A)
  • 我按下主页按钮使应用程序后台运行,当时为我的应用程序状态(A)执行状态编码。
  • 然后该应用程序位于后台。
  • 然后我通过停止在 Xcode 中运行来强制终止该应用程序。
  • 最后,我从手表发送消息,导致系统重新运行被杀死的应用程序。
  • 在这个阶段,我预计会发生状态恢复加载,消息进来并被处理,将应用程序状态更改为状态 B,然后应用程序回到后台。

我的问题是该应用程序在最初后台运行时仍将其状态编码保存在状态 A 中。

在处理完手表连接 sendMessage 后,有什么方法可以强制在后台进行新的状态编码?

当我下一次正确打开我的应用程序时会发生什么,是否会发生状态恢复,这会在处理完手表 sendMessage 后将我们带回到状态 A,它应该处于状态 B。我猜它仍在后台运行,所以无论发生了什么应用程序在后台生成的应用程序应该持续存在,并且不应发生新的状态恢复。但是,如果系统在状态 B 的背景下再次杀死应用程序怎么办。它是否理解这种情况需要新的状态编码来保存新的状态 B,或者它只是杀死应用程序而不做任何事情。如果是这样,那么当我们最终重新启动它时,我们可能会再次回到应用程序状态 A 而不是 B。

顺便说一句,刚刚开始尝试调试这类事情,尽管似乎无法连接我的调试器以用于该系统重新运行我的 iPhone 应用程序的实例。我注意到,当我执行应该唤醒被杀死的 iPhone 应用程序的 sendMessage 时,手表应用程序没有正确更新,即。电话应用程序未完全执行请求的操作。我目前对这个州发生的事情一无所知,但想知道状态恢复是否会阻碍。是否收到消息,唤醒应用程序,尝试对不存在的数据采取行动,因为尚未发生状态恢复,然后发生状态恢复..我第二次从手表发送消息时应用程序行为正确,所以它的好像初始消息唤醒了应用程序但由于某种原因没有 t 正确处理消息。一旦正确唤醒,下一个 sendMessage 将正常处理。

抱歉,我发现文档在 iPhone 应用程序从 sendMessage 调用重新运行后台时发生的情况相当模糊。有人有什么想法吗?非常感谢您的时间!干杯!

0 投票
1 回答
72 浏览

state-restoration - 恢复模态视图控制器

该方法没有被调用... + (UIViewController *)viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents 在定义一个 restoreClass 之后

AppDelegate.m 未使用

0 投票
0 回答
96 浏览

ios - 如何在 NSCoding 状态恢复期间引用现有对象

我有一个实现 NSCoding 并持有对 UIView 对象的引用的类...

传递的view是一个特殊的重量级自定义视图类,我不需要序列化。有很多A对象,它们都引用了相同的 custom UIView。但是在状态恢复期间,我需要引用它来恢复A. 该view实例在我需要的时候已经存在,并且我的自定义 UIViewController 实际上启动了解码序列:

但是我怎样才能使现有视图可供使用A.init?(coder aDecoder: NSCoder)

0 投票
1 回答
398 浏览

macos - How to programmatically terminate NSApp without encoding window state?

All OS X application that support NSWindowRestoration can be closed by selecting the menu entry "Quit and Close All Windows" (Option-Command Q). This disables the state restoration and the next time you open the app all windows will be in their default position.

The menu entry triggers the terminate: method on NSApplication. But so does the regular "Close App" menu as well (Command Q).

How can I do the "Quit and Close All Windows" programmatically? Do I really have to close all windows by myself and then call terminate:?

How does Apple magically decide what to do, when both actions are connected to the same terminate: method?