问题标签 [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.
ios - 视图控制器之间共享数据时的 iOS 状态保存和恢复
我是第一次实现 iOS 状态保存和恢复,所以这个问题对于更有经验的人来说可能很明显!
我有一个故事板,其中包含通往各种场景的多条路径。例如,从场景 A 开始,用户可以到场景 B,然后到场景 C,或者用户可以直接到场景 C。
在 View Controller A 中创建一个“大”NSDictionary,然后将其传递给 View Controller B,然后通过 prepareForSegue 方法传递给 View Controller C(或直接传递给 C)。
我相信我能够在 View Controller A 中恢复 NSDictionary,但是如何为 View Controller B 和/或 C 获取它而不是制作额外的副本?
ios - 为什么在应用程序状态保存期间没有在 SKNode 的子类上调用 encodeWithCoder?
摘要:当我从父类派生自定义类时<NSCoding>
,我看到encodeWithCoder
在应用程序状态保存期间调用了我的方法。如果我将父母更改为,则不再调用SKNode
我的方法。encodeWithCoder
细节:
UIKit
我的视图控制器在应用程序状态保存期间被编码。它对类型的单个对象进行编码MyNode
。
MyNode
是为这个问题构建的精简类。为了完整起见,我将包含代码,但 encode 和 decode 方法仅调用NSLog
and super
。
MyNode
当is的父级时MyParent
,如上所述,我会在应用程序保存期间看到我的日志输出:
但是当我将父级更改为MyNode
toSKNode
时,我的encodeWithCoder
实现不会被调用:
为什么不?
我尝试过的事情:
- 使用我自己的
NSKeyedArchiver
. 这按预期工作。 - 在我的自定义类上实现
UIStateRestoring
协议,并使用恢复标识符将其注册到应用程序中。这对我来说没有多大意义。 - 胡闹
classForCoder
,就像在这个问题中一样。但这听起来并不适用,并且classForCoder
无论如何都不会在我的自定义类上被调用。
(启发这个测试用例的现实问题的细节似乎并不相关。)
ios - 状态恢复发出警告 - 导致莫名其妙的视觉异常
到目前为止,互联网上还没有出现这种发生在我身上的状态恢复警告:
TabBarController 有一个视图,它将 ViewController (vc1) 推送到导航控制器上。VC1 然后以模态方式将 NavigationController 推送到自身上,它有自己的一系列视图控制器,从 vc2 开始。
当状态恢复时,它会闪回到 vc1(从 vc2 的快照),然后最终再次实时显示 vc2。
如果有人对我什至可以从哪里开始研究这个有任何想法,那将是一个很大的帮助。
ios - 如何使用状态恢复来恢复视图控制器的子视图
我正在使用状态恢复为我的应用程序恢复以前的视图和数据。当在第一个视图控制器中单击一个按钮时,我将推送第二个视图控件。在这种情况下,我可以恢复第二个视图控制器数据。但是如果我添加第二个当在第一个视图控制器中单击按钮时,将视图控制器视图作为第一个视图控制器的子视图,在第二个视图控制器中未调用 encodeRestorableStateWithCoder:和 decodeRestorableStateWithCoder:。无法恢复第二个视图控制器数据。我需要做任何其他配置来恢复子视图数据 ?
objective-c - 状态恢复的状态栏样式
有没有办法在应用程序启动期间将状态栏样式重置为保留(保存)应用程序状态时使用的样式?
ios - State restoration and preservation , encoding UILabel
The code above is used to encode all the UILabel that I added as subview onto the screen through a for loop. However when decoding the only thing i get is (null) from the console. Please help.
cocoa - 如何在 Swift 中实现 NSWindowRestoration?
我尝试在非基于文档的应用程序中在 Swift 中实现 NSWindowRestoration 协议。但是,该方法restoreWindowWithIdentifier
永远不会在应用程序启动时调用。谁能指出我的错误?
这是代码的子集(编译和运行良好):
提前致谢!
ios - 有什么方法可以选择退出核心蓝牙状态恢复?
一旦 CBCentralManager 已经用恢复标识符实例化,有人知道如何选择退出 CB 状态恢复吗?
基本上我想根据某些条件再次关闭 CB 状态恢复(= 我不想一直使用状态恢复)。
我是否必须简单地释放 centralManager 并创建一个没有恢复标识符的新实例?
ios - 恢复并保留从 UINavigationController 推送的 UIViewController,没有情节提要
我尝试恢复从初始视图控制器推送的简单 UIViewController。第一个被保留,但第二个在重新启动时消失。我不使用故事板。我在每个视图控制器中实现该协议,并将 restoreIdentifier 和 restoreClass 添加到每个视图控制器中。
第二个 viewController 继承自第三个 viewController 并从 xib 文件初始化。我不确定是否需要将 UIViewControllerRestoration 实现到第三个,因为我不直接使用它。
我的代码通常看起来像这样:
导航控制器是否应该被子类化,以便它也可以从 UIViewControllerRestoration 继承?
更新:好的,似乎从 UIViewController 推送到 UIViewController 有效。但是从 UIViewController 推送到 UITableViewController ,反之亦然,不起作用。如果 tableview 实现 UIViewControllerRestoration 协议,则应用程序崩溃。如果我不实现该协议,则不会保留从 tableView 推送的 UIViewControllers。
应该如何对待 UITableViewControllers 以保护它们而不会崩溃?
更新:不再崩溃。这是由于我的应用程序特有的内存错误。但是tableView仍然没有保留,推送的viewController也没有。
更新:我的tableview没有正确恢复的原因是因为我在后台删除了我的数据源。但是当我尝试将它推送到另一个navigationController而不是self.navigationController时,我仍然遇到模态viewController没有显示的问题。我将恢复标识符设置为此模态导航控制器,但视图未显示。
ios - UITableViewController 子类实现 UIDataSourceModelAssociation 协议,但它的方法永远不会被调用
我的应用程序使用斯坦福课程的 CoreDataTableViewController,它是 UITableViewController 的子类。
对于我的应用程序的特定视图,我创建 CoreDataTableViewController 的子类来管理特定视图。
我最近刚刚在我的大部分应用程序中连接了状态编码和恢复,这一切似乎都工作正常。我唯一迟到的是实现 UIDataSourceModelAssociation 协议以据称保留 UITableViews 的可见和选定行(我也希望它可以保留表格视图的编辑状态,如果我选择了特定行的话删除,但尚未确认)。
我在 CoreDataTableViewController 中实现了 UIDataSourceModelAssociation,希望它能够适用于我的所有视图,但是在调试它时,该功能不起作用,并添加断点我发现当我将我的应用程序放入时,两个 UIDataSourceModelAssociation 方法都没有被调用使用主页按钮的背景,或者通过在 XCode 中重新运行来恢复它。
CoreDataTableViewController 和我的子类实现了一些 dataSource 方法来实际显示我的表格视图中的行。我四处搜索,发现 UITableViewController 自动将自己添加为 tableView 的数据源。
我在表单的子类 viewDidLoad 函数中添加了理智断言
在检查我们自己的数据源时失败了。通过记录和使用调试器,我可以看到此时 dataSource 不为零。
我想我只是想知道当我们对一个类进行子类化时,每个类是否共享相同的 self 值,或者是因为我的 UITableViewController 已将自己设置为数据源,但是当我将它子类化两次到我的特定视图实例时它的自身与父 UITableViewController 略有不同。或者是其他东西拦截数据源并根据需要转发。作为一个修复,我应该考虑将我自己的子类硬编码为 self,或者让 CoreDataTableViewController 将自身显式添加为 dataSource,因为这是实现 UIDataSourceModelAssociation 方法的地方。
作为参考,我的视图层次结构由位于 NavigationControllers 中的 UITableViewController 子类视图组成,我听说这可能会导致问题。
只要稍微清楚地说明子类化应该如何处理跨类的自指针,并想知道是否有人能弄清楚为什么我的协议方法没有被调用,将不胜感激。
干杯