问题标签 [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 - 在一个视图控制器中恢复多个文本字段和标签
我有一个视图控制器,其中包含 2 个文本字段、2 个分段控件和一些标签,这些标签显示用户使用UIButtons
. 我希望能够在退出/重新启动时恢复这些项目的任何用户设置值,以及返回我的主菜单view controller
时,这是一个navigation controller
. 使用以下代码,我可以在背景/终止/重新启动时恢复其中一个文本字段,但我不确定如何为我的其他文本字段或时间戳标签和分段控件完成此操作。我试图通过更改文本字段名称和@"UnsavedText"
字符串来复制恢复代码,但没有成功。
此外,每当我使用导航栏中的后退按钮返回主菜单时,我都会丢失所有字段中的所有数据。
这是我的委托中的代码,选择状态恢复:
这是我的视图控制器中用于恢复一个文本字段的相关代码。我将我的viewDidLoad
代码包含在状态初始化中,以防这是问题的一部分:
提前致谢!
编辑:
这是我根据建议尝试的代码:
我的按钮单击表面上应该保存时间戳值:
ios - UIViewControllers 正在创建但未在状态恢复中显示
我有一个应用程序在状态恢复时无法正常工作。以前是这样,但是当我开始远离故事板时,它停止了。
我的应用程序以LoginViewController
我的故事板中的起始视图控制器开头。如果登录成功,则尝试将两个添加FolderViewController
到导航控制器。这样可见文件夹已经深了一层。这是在以下代码中完成的:
FolderViewController
有这个awakeFromNib
在故事板中,FolderViewController 有一个restorationIdentifier
集合。当我按下主页按钮时,应用程序被暂停。我的恢复电话FolderViewController
正在被调用:
现在的问题是当我尝试恢复时。我在调试器中停止应用程序,然后重新启动它。这将启动恢复过程。
首先,我viewControllerWithRestorationIdentifierPath:coder:
的 for myLoginViewController
被称为。这并没有多大作用,它的使用是可选的。我试过删除它,我没有任何不良影响。
接下来,viewControllerWithRestorationIdentifierPath:coder:
for myFolderViewController
被称为:
我以前也有一个decodeRestorableStateWithCoder:
,它确实被调用了。但是,由于它是在 中设置的viewControllerWithRestorationIdentifierPath:coder:
,因此没有必要保留它。
所有这些事情都被调用了适当的次数。但最终,唯一显示在LoginViewController
. 为什么我FolderViewController
的 s 不显示。我需要在我LoginViewController
的附加视图控制器中做一些缺失的设置吗?我之前手动添加的?
编辑
在阅读了似乎相关的http://aplus.rs/2013/state-restoration-for-modal-view-controllers/之后,我在 App 委托中添加了以下代码:
我认为应用程序现在更快乐,但它仍然没有正确恢复。现在我在我的日志中得到这个错误:
警告:尝试在视图不在窗口层次结构中的 <LoginViewController: 0xbaa1260> 上呈现 <UINavigationController: 0xbaacf50>!
这是不同的东西。
ios - 使用唯一键的 NSKeyed 归档器警告
当我在测试保存/状态恢复时使用主页按钮将我的应用程序置于后台时,我收到了多个类似的日志警告。
该应用程序在设备上运行良好,所有状态恢复/保存都可以正常工作,但我很想摆脱这些警告。那里没有关于这些警告的大量信息,但从我所读到的内容来看,只要我为我保留的每个 UI 项目使用唯一键,我应该会很好。
有什么想法可以解决这个问题吗?谢谢。
这是我的代码:
ios - 使用 NSCoder 进行视图之间的恢复 (viewWillAppear / viewWillDisappear)
我想知道在使用UINavigationBar
后退箭头来回导航到我的主菜单时是否有一种方法可以保持用户输入NSCoder
。我目前正在使用NSCoder
在后台/终止/重新启动期间维护此数据并NSUserDefaults
维护视图之间的数据,但是 和 的组合NSCoder
会NSUserDefaults
产生不可预测的结果。有时,两种类型的恢复都有效,但有时 BG/Term/RS 恢复不起作用,我说的是在我的设备上加载相同的相同代码。当NSUserDefaults
代码被注释掉时,BG/Term/RS 恢复每次都有效。
我想知道它是否可以NSCoder
用于我所有的恢复需求,如果可以,该代码会是什么样子。
这是我用于 BG/Term/RS 恢复的内容:
这是NSUserDefaults
我目前用来在菜单和主视图之间来回保存数据的代码,理想情况下我希望用NSCoder
解决方案替换它:
我一直在与这个问题作斗争几天,但没有运气。任何帮助将不胜感激!谢谢。
ios - 许多价值中的一个没有按应有的方式恢复
我的一个视图控制器中有一些元素,我为其设置了恢复,以便在视图之间导航以及程序终止时保存值。所有值都根据需要保存,除了以下一个例外,它是一个 BOOL,每次重新打开视图时都会恢复为“0”。
这是我在视图控制器标头中声明变量的地方:
这是我的视图控制器实现文件中的代码。所有其他元素都以相同的方式保存和工作,而这个元素一直恢复为 NO/“0”:
真正疯狂的是,我的控制台在返回视图后立即看起来是这样的:
默认值如何保存为 1,但值为 0 对我来说是不可理解的。任何帮助将不胜感激。谢谢!
ios - iOS 状态恢复日志警告而不是在模拟器中运行
我在状态恢复的 iOS 模拟器中有一些奇怪的行为。我最近才意识到它只发生在模拟器中。我想知道我是否做错了什么。但我也想分享一下我的经验。
我在 Xcode 5.0.2 中创建了一个单屏项目。在我的应用程序委托中,我只添加了两种方法:
没有其他变化。
在实际的 iPhone 上调试时,我得到了两条日志消息;启动时“我正在恢复”,按下主页按钮停止应用程序时“我正在保存”。如果我注释掉其中一个或两个,我不会收到任何日志消息。似乎您需要这两种方法才能工作。他们甚至不会在没有对方在场的情况下被叫到。
在 iOS 模拟器中调试时,(我不知道如何判断我在模拟器中使用的操作系统版本)我从来没有收到任何日志消息。如果两种方法都存在,并且只有两种方法都存在,我的日志中会显示“警告:无法创建正在进行的恢复标记文件”,但我仍然没有收到我所做的日志消息。因此,仅两者的存在就会引起警告,但地球上没有任何力量可以召唤它们。在模拟器中。我尝试在情节提要中添加恢复 ID,但它没有改变任何东西。
我意识到 Apple 建议在实际设备上运行,并且他们不保证在模拟器上会有类似的行为。但是我需要在某个地方放置一些设置才能在模拟器中恢复状态吗?有一次我让它工作了,我认为我的故事板更改破坏了它。但是对于这样一个最小的应用程序,我想知道是否有更基本的东西。
ios - RootView 控制器在状态恢复时显示较短
我使用 SDK 提供的状态恢复。
我从情节提要加载所有视图控制器。初始视图控制器以模态方式显示另一个视图控制器。两者都有一个恢复标识符。
恢复工作正常但是:当我在模态呈现的视图控制器中并按主页时(保存状态)。然后重新打开应用程序并开始状态恢复,发生以下情况:
一瞬间,我看到了初始视图控制器,然后屏幕变成了我真正想看到的模态呈现的控制器。
为什么会这样?缓存目录中的快照确实显示了正确的屏幕(来自呈现的视图控制器)。
您可以重现此项目的问题。在初始视图控制器的 viewDidAppear 方法中添加断点,当恢复状态时,您将在屏幕和视图层次结构中看到初始视图控制器的视图:
如果您检查视图控制器层次结构,模态呈现的视图控制器不在初始视图控制器呈现的属性中:
断点是在(理论上)状态恢复之后。但稍后它将正确设置。
ios - 带有 xcode 5 的 ios 7 中的状态保存和恢复
我正在尝试在我的应用程序中实现状态保存和恢复机制,因为我在 appDelegate 中实现了以下两种方法,还在情节提要中为我的每个 viewController 提供了恢复 ID,我面临的问题是,当我重新打开应用程序时,我可以看到我以前的或恢复的屏幕,但只有一秒钟,然后它移动到主故事板文件的基本视图控制器。
请向我建议解决方案,或者如果我在这里弄错了什么。请耐心等待回复。提前致谢。
更新部分:
我在我的应用程序委托中使用以下方法 NSString * const AppDelegateRootVCKey = @"AppDelegateRootVCKey";
我的应用程序初始化部分也在 willFinishLaunchingWithOptions 中,我的 didFinishLaunching 如下
我通过情节提要向所有控制器提供了恢复标识符,也通过代码向我的其他 .xibs 提供了恢复标识符。所以现在上述事情的结果是,每当我在情节提要屏幕上时,它都会保留我的状态,但是如果我点击标题上的后退或其他按钮来打开我的左侧/右侧菜单屏幕,它就会崩溃,原因是无法识别的选择器。崩溃后,如果我再次重新打开它,它会从 mainStoryboard 开始,然后一切正常。另一个问题是,每当我使用我的 xib 屏幕进行测试时,它都不会保留应用程序状态,并从 mainStoryboard 重新启动应用程序。
ios - UIViewController 自定义转换和状态恢复
我有一个使用自定义转换的视图控制器,它运行良好。它利用了这样一个事实,即在使用 UIModalPresentationCustom 时,呈现视图控制器不会被删除,而是将新的视图控制器透明地放置在它上面。
但是,当将此与状态恢复结合使用时,将删除呈现视图控制器。似乎因为视图控制器没有动画呈现,所以从不调用自定义转换代码。有没有办法激活自定义转换,即使视图控制器没有动画?
ios - iOS 恢复 - 为什么在我正在恢复的视图之前显示另一个视图?
我的故事板有: NavigationController -> UIViewController 1 -> UIViewController 2 -> UIViewController 3 -> UITabBarController -> 四个 UIViewControllers (a,b,c,d)
我正在为应用程序添加恢复支持。我已将其添加到 UIViewController #1 和 #3,现在将其添加到 UITabBarController 下的 UIViewController 'c'。
当我在显示 UIViewController 'c' 时使用 Xcode 杀死我的应用程序,然后再次启动应用程序时,正确调用了 viewcontroller 的方法并且其 UITextFields 的内容被正确恢复。
但是在“c”视图控制器中放置断点时,我可以看到 UIViewController 3 暂时显示。它的 viewDidLoad 和 viewWillAppear: 方法被调用。
显示 UIViewController #3 的典型原因是什么?
我一直在为我的 UIViewControllers 实施恢复,从最终用户的角度来看似乎没有任何负面影响 - 如果没有断点,显示器就没有机会更新以显示中间视图。