问题标签 [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 投票
3 回答
17204 浏览

swift - Swift:通过 ID 获取 UI 对象?

在 iOS 中,是否可以为 UI 对象分配一个字符串 ID,然后通过该 ID 在代码中检索它们?

我正在寻找类似于Android的东西findViewById(id)

0 投票
1 回答
203 浏览

ios - iOS 中使用 MMDrawer 的状态保存和恢复问题

我已将MMDrawerController库集成到 iOS 应用程序中,现在我需要恢复应用程序状态,即使应用程序在后台被杀死(仅当应用程序从前台进入后台时),它与普通导航应用程序一起工作但当我在我的应用程序中使用“ setCenterViewController ”选项更改导航,恢复未按预期工作,我已遵循此链接中提供的所有说明:“ https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/PreservingandRestoringState.html "

我使用setCenterViewController选项(从 MMDrawer 推荐)导航到特定屏幕,然后在后台删除应用程序,当我们重新打开它时,它会以默认初始屏幕启动,但我们希望它应该在进入后台之前使用它的屏幕重新打开。

这是代码片段:


帮我解决这个问题。

0 投票
1 回答
146 浏览

ios - 如果不在 viewDidLoad 中,我应该在哪里进行初始网络调用(例如,最初填充提要)?

viewDidLoad以前,在所有视图都设置好之后,我进行了初始网络调用以填充用户的提要。

但是,使用 iOS 的状态恢复机制,这不起作用,因为状态恢复是在之后 viewDidLoad执行的,所以如果我想阻止调用,因为数据已经从恢复中填充,我不能,因为那只是后为人所知viewDidLoad

那么我应该在哪里进行初始网络调用等呢?viewDidAppear每次您从被调用的导航控制器堆栈导航回来时,这似乎是错误的。我可以设置一个标志,表明已经进行了初始调用,但这似乎有点恶心。

典型的建议似乎是在 viewDidLoad中做一次性的事情,而不是 viewDidAppear ,这就是我担心的原因。

这里有建议的策略吗?

0 投票
1 回答
470 浏览

ios - 模态视图控制器在状态恢复时动画

对于具有拆分视图控制器的通用应用程序的状态恢复,我遇到了一个奇怪的问题。

奇怪的是,我使用 Storyboard 和 segues 以及所有相关视图控制器的恢复标识符以非常标准的方式做事。实际上没有任何代码,因为逻辑在 Storyboard 中,并且一个最小的 XCode 项目显示了这一点。

问题在于设置屏幕以模态方式显示为从拆分视图控制器呈现的表单。我的视图控制器层次结构最终是正确的,但转换并没有真正意义。由于某种原因,状态恢复使模态控制器动画到位。

由于屏幕以上次运行应用程序时的屏幕截图开始,并且设置控制器已经存在,因此动画只是视觉噪音。

我试图禁用 segue 上的动画,这是在交互式输入设置时受到尊重的,但是当状态恢复做同样的事情时,动画就在那里。

避免这种情况的标准方法是什么?

0 投票
1 回答
671 浏览

ios - 呈现视图控制器时状态恢复不起作用?

我没有使用故事板。目前在 ViewController1 中。在按钮单击事件中,我调用此代码。

并在 InnerViewControllerrestorationIdentifierrestorationClass给出。我为恢复编写了适当的方法。比如

如果我改变我的

它工作正常。我现在错过了什么或做错了什么。为了尝试,我什至试过这个:

但是没有用。不工作。

演示时的结果是 -

viewControllerWithRestorationIdentifierPath

并被decodeRestorableStateWithCoder调用。电话也进来了,viewdidload但没有进来viewwillappear。我在视觉上看到Viewcontroller1。然而这一切都很好push

礼物需要什么特别的东西 吗?

0 投票
1 回答
47 浏览

ios - 为什么要恢复中间视图控制器?

我正在为我的应用程序使用状态恢复。我有 vc1 -> vc2 -> vc3。

在 vc3 上,我实现了恢复委托和恢复标识符。但是在 vc1 和 v2 上,我只实现了标识符。

当我到达 vc3 时,它会恢复正常。但是当我到达 vc2 时,它也会恢复。它只设置了恢复标识符。中间视图控制器是否也得到恢复?我不想要它。

0 投票
1 回答
257 浏览

swift - Xcode 8.1 UIDataSourceModelAssociation 坏了?

我正在尝试在核心数据项目(Swift)上实现状态恢复,并且在拆分视图控制器中的 UITableView 的数据源上实现 UIDataSourceModelAssociation 协议时遇到问题,该控制器是围绕 NSFetchedResultsController 的包装类。代码是:

我收到一个 EXC_BAD_INSTRUCTION 异常,它在状态恢复时停止 AppDelegate 类顶部的调试器,这似乎指向“静态 Foundation.IndexPath._unconditionallyBridgeFromObjectiveC (Swift.Optional<__ObjC.NSIndexPath>) -> Foundation 的问题.IndexPath”。

我使用 restoreArchiveTool 将结果 data.data 文件从 savedState 文件夹转换为 plist,使用命令“.../restorationArchiveTool --plist --structured -o path/to/outputfile

如果我使用预览查看生成的 plist 文件,我会得到以下信息:

kApplicationSelectedCellIndexPathsKey...("<NSIndexPath: 0x7fe60054cb00> {length = 2, path = 0 - 3}")

...但是如果我在 Xcode 中打开 plist,我会得到以下信息:

kApplicationSelectedCellIndexPathsKey 用于键,但只有 ( 用于值

假设解码器使用与 plist 读取器相同的算法来转换数据文件,那么出现某种异常也就不足为奇了。

如果我删除 UIDataSourceModelAssociation 扩展,异常就会消失。

其他人可以确认这个问题还是我错过了一些非常明显的东西?

0 投票
0 回答
49 浏览

ios - 在 iOS 上使用状态恢复时保存完成处理程序的策略是什么?

我正在我的应用程序中实施状态恢复,以允许应用程序在应用程序被操作系统清除后返回到它所在的位置。

编码和解码必要的变量(例如用户在文本字段中键入的文本)相当简单,但是,如何保存在变量上设置的完成处理程序块?

例如,以 Apple 的UIAlertController. 您使用UIAlertActions 创建它,它在创建时具有一个处理程序的参数,该处理程序在点击时触发。handler: ((UIAlertAction) -> Void)?

如果我是 Apple,并且我想恢复UIAlertController提供的内容,我将如何恢复该处理程序?它显然包含在其范围内使用的不可预测的大量变量,所以我无法想象你可以只使用NSCoder'sencodeObject方法。

对此有公认的策略吗?或者甚至是一种方法来做到这一点?

是的,我知道委派是一种选择,但是最近越来越多地使用块,并且如上所述,Apple 正在使用它们。捕获周围变量上下文的能力很重要,而委托不提供。

0 投票
1 回答
1526 浏览

swift - NSViewController 用户界面状态恢复

概括:

使用 Cocoa 的内置用户界面保存机制保存/恢复NSSearchField我的状态的正确方法是什么?NSViewController

细节:

我正在开发我的第一个 macOS 应用程序,但我在用户界面的状态恢复方面遇到了一些问题。到目前为止,我的工作已经到了在我的子类中调用encodeRestorableState(with:)andrestoreState(with:)方法的地步NSViewController

我的视图控制器中有一个NSSearchField,我想保存/恢复搜索字段的状态,包括其文本、任何选择、光标位置以及当前是否处于焦点。

如果我使用以下代码,则可以正确保存和恢复文本:

显然我可以添加更多代码来保存/恢复搜索字段的选择和光标位置等。

我真正的问题是,有没有更好、更合适、更自动的方法来保存和恢复搜索字段的状态?还是需要我为要保存的搜索字段的每个属性编写自己的代码?

我尝试使用:

和:

在上述两种方法中,但是当我的应用程序重新启动时,搜索字段中没有出现任何内容。

我还实现了:

我的视图控制器中插座属性"searchField"的名称在哪里。NSTextField当我的应用程序启动但文本未在搜索字段中恢复时调用此方法。

此视图控制器是从情节提要创建的。视图控制器的identifier设置。搜索字段identifier也已设置。这个视图控制器是另一个视图控制器的子视图控制器。

我已通读“核心应用程序设计”文档的用户界面保留部分,但不清楚如何保存/恢复视图控制器的视图,以及其中有多少是自动与手动。

支持 OSX 10.12 和 10.11。任何答案中的 Objective-C 或 Swift 都可以。

0 投票
1 回答
333 浏览

ios - 如何在 iOS 中使用故事板保存和恢复状态?

我正在开发聊天应用程序。我想存储所有视图控制器的应用程序状态。

我存储应用程序状态的代码:

我能够编码应用程序的状态,但不能解码。在我添加的应用委托类中 shouldRestoreApplicationState,willEncodeRestorableStateWithCoder

请给我适当的解决方案来保存和恢复 iOS 中的应用程序状态。