问题标签 [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 回答
8126 浏览

ios - UINavigationController 状态恢复(无情节提要)

我一直在玩弄状态恢复。在下面的代码中,UITableViewController 的滚动位置被恢复,但是,如果我要点击进入详细视图(将 MyViewController 的实例推送到导航堆栈上),当应用程序重新启动时,它总是返回到第一个视图导航堆栈中的控制器(即 MyTableViewController)。有人能帮我恢复到正确的视图控制器(即 MyOtherViewController)吗?

AppDelegate.m

MyTableViewController.m

MyOtherViewController.m

0 投票
2 回答
3256 浏览

ios6 - iOS 6 UIWebView 状态恢复如何工作?

根据文档

在 iOS 6 及更高版本中,如果您为此视图的 restoreIdentifier 属性分配一个值,它会尝试保留其 URL 历史记录、每个页面的缩放和滚动位置以及有关当前正在查看的页面的信息。在恢复过程中,视图会恢复这些值,以便 Web 内容与之前一样显示。

我正在做这一切,但什么都没有发生。即使我手动保存和恢复用户之前查看的 URL,滚动位置也不会恢复。文档是错的吗?

0 投票
2 回答
181 浏览

ios - 应用程序状态保存/恢复

我想知道应用程序状态保存/恢复是强制性的还是可选的,以使应用程序获得 App Store 的批准?

0 投票
1 回答
491 浏览

ios - iOS6中使用restoreIdentifier保存UIImageView的状态

我在文档中读到@property(nonatomic, copy) NSString *restorationIdentifier能够保留UIImageView位置、角度等属性的状态。我尝试添加方法

到视图控制器。我已经@"myFirstViewController在 IB 中设置了视图控制器的恢复 ID。

我也在视图控制器中添加了以下方法。

我应该在appDelegate视图控制器或视图控制器中添加前两种方法吗?UIImageView 没有得到保留。这里有什么问题?

0 投票
1 回答
165 浏览

ios - UIKit 恢复未在所有 VC 上调用 viewControllerWithRestoreIdentifierPath

我的应用概述

- 在我使用导航控制器时,它位于相应的XIB MainWindow.xib 中。它在应用程序委托中设置为根 vc。

-CategoriesVC 是一个表 vc,它是根 vc 中的顶层 VC。

-BooksCategoryVC(一个类别中的所有书籍)是另一个表 vc,它是在从 CategoriesVC 中选择某些内容后推送的

-BookScrollVC.m 是一个滚动vc,在选择一本书后显示文本。

代码说明

1)在我的应用程序委托中,我已将 shouldSaveApplicationState 和 shouldRestoreApplicationState 设置为返回 YES

2) CategoriesVC 位于 MainWindow XIB 中,我在 IB 和 .m 中设置了恢复标识符,我已经将 restoreClass 设置为 self 并实现了 viewControllerWithRestoreIdentifierPath

3)BooksCategory 有自己的 XIB 并实现了恢复协议,几乎与

4) 与 3) 相同,但 VC 是在代码中实例化的。这里没有XIB。

流动

启动应用程序。一直导航到最后一个 VC (BookScrollVC)。

在模拟器中按下 Home 按钮时:

encodeRestorableStateWithCoder 在 CategoriesVC 中被调用,并且不会继续到其他 VC。它不应该通过所有已经实现恢复协议的VC吗?

从 Xcode 重新启动应用程序时,实际上只viewControllerWithRestorationIdentifierPath调用了 CategoriesVC 中的 。

如果有任何不清楚或您希望查看代码,请告诉我

0 投票
1 回答
1090 浏览

ios - 在状态恢复期间创建和恢复 UIViewControllers 的正确方法?

我想在不使用故事板的应用程序中进行状态恢复。我看到我的主应用 ViewController 在状态恢复期间实例化了两次 - 你如何确保它只创建一次?

我理解流程的方式,application:willFinishLaunchingWithOptions并且pplication:didFinishLaunchingWithOptions会使用一种commonInit方法来设置应用程序 UIWindow 及其 rootViewController。在我的例子中,rootViewController 是一个 UINavigationController,其中一个名为“MyMainViewController”的类用作 UINavigation 的 rootViewController。

除此之外,我还分别处理willEncodeRestorableStateWithCoderdidDecodeRestorableStateWithCoder。但似乎当我到达 mydidDecodeRestorableStateWithCoder时,我看到创建了两个独立的 MyMainViewController 实例。

有什么办法可以保证恢复时只创建一个 UIViewController?

恢复期间的调用顺序:

  • 通过应用程序创建新实例 MyMainViewController (#1):willFinishLaunchingWithOptions:
  • MyMainViewController 的 viewControllerWithRestorationIdentifierPath:coder 调用和 MainViewController 被恢复 (#2)
  • application:didDecodeRestorableStateWithCoder: 被调用并且 UINavigationController 被解码并分配给 self.window

这是我在 AppDelegate 中所做的:

0 投票
1 回答
3414 浏览

iphone - 使用自定义容器视图控制器 (MMDrawerController) 进行 iOS 状态恢复

设置

我有一个滑动菜单自定义容器视图控制器 ( MMDrawerController ) 控制一个中心视图控制器和一个滑出左侧菜单/抽屉。就像 Facebook 应用程序和其他数百个应用程序一样。

打开左侧的抽屉并点击菜单项会替换中心视图控制器。

什么工作

如果我打开应用程序,按下第一个中心视图控制器上的按钮(更改背景颜色),我可以终止应用程序并成功恢复背景颜色。完美的。

什么不工作

如果我选择另一个中心 vc 来加载(通过打开菜单/抽屉并选择一个菜单选项)然后终止应用程序,应用程序将不会恢复到该视图控制器。

我在做什么

在我的父视图控制器中,我正在编码左侧和中心视图控制器,以便我可以在恢复时重新创建它们。

在我更改第一个中心视图控制器颜色的流程中,在解码期间我可以成功返回中心并离开视图控制器。但是,在我选择要加载的新中心 vc 的流程中,在解码期间这些对象为零。

如何设置我的自定义容器视图控制器以正确编码对其子项的引用,以保证在解码时将它们取回?

更新 1

使用restoreArchiveTool 在运行无法正确恢复的场景后,我检查了存档,并且存档实际上包含我期望的编码对象的层次结构。我仍然无法弄清楚为什么那些以前编码的视图控制器在解码过程中最终为空。

更新 2 如果您查看此要点的评论部分,您会发现所有正确的编码/解码调用似乎都在保存和恢复时发生。我想知道在我的应用程序委托中,当我最初设置我的根视图控制器(mmdrawercontroller 的实例)时,如果我以某种方式破坏了状态恢复?这就是我正在做的事情:

0 投票
6 回答
2261 浏览

ios - 如何最好地处理 CoreData + iOS 状态恢复?

我正在尝试将 iOS 6 状态恢复添加到我即将完成的应用程序中。这是一个模型主要来自 CoreData 的应用程序。

按照建议,我使用“传递接力棒”的方法在视图控制器之间移动托管对象上下文 - 我在我的 App Delegate 中创建 MOC,将其传递给第一个视图控制器,后者将其传递给 prepareForSegue 中的第二个:,它将它传递给 prepareForSegue: 等中的第三个。

这似乎与状态恢复不太吻合。我唯一能想到的就是在 viewControllerWithRestorationIdentifierPath:coder: 的实现中直接从我的 App Delegate 中检索 MOC。事实上,苹果开发者在观看 WWDC 会议时似乎也做了类似的事情。

这是最好/唯一的方法吗?状态恢复是否有效地打破了传递接力棒,至少对于恢复的视图控制器?

0 投票
1 回答
271 浏览

ios - 如何使用 iOS 状态恢复来恢复 UIPopoverController?

在我的一个应用程序中,我实现了状态恢复,目前正在开发 iPad 版本。在我UIPopoverController用于显示视图控制器的 iPad 版本中,但我无法找出应该如何保存和恢复这些弹出框控制器。

UIPopoverController不继承自UIViewController,因此没有我可以使用的属性restorationIdentifierrestorationClass

我是否负责在我的主视图控制器中手动保存弹出控制器targetRect并对其进行编码,contentViewController以便我可以在其方法期间恢复它,-decodeRestorableStateWithCoder:或者是否有一种我在文档中找不到的更简单的方法?

法班

0 投票
3 回答
2722 浏览

iphone - 没有任何谷歌结果的神秘警告[在模拟器中]

我在我的 iOS 项目中收到此警告:(iOS7,XCode 5 GM)

警告:无法创建正在进行中的恢复标记文件

我正在开发一个视图控制器,当我在启动时收到此警告时会变成全黑。删除应用程序并重新启动 XCode 有时似乎会有所帮助。我都拒绝

Update1:​​我在 iPhone4s 上测试过。结果相同。我的视图控制器上出现警告和黑屏。

Update2:回答了我自己的黑屏问题。该警告在最新的 iOS 7.0.x 版本中消失了。