问题标签 [uikit-state-preservation]

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 回答
867 浏览

ios - 具有自定义委托或数据源的视图控制器的状态保留

我正在尝试使用 iOS 6+(我的应用程序是 7.0+)状态保留来保留从另一个视图控制器模态呈现的视图。因此,它具有典型的模态视图控制器解除模式:

TNTLoginViewController.h 包含

开始:实施

TNTLoginViewControllerDismiss:委托上的方法,它呈现了模态

这一切都像一个魅力!直到国家保护。简单地说,我不知道 TNTLoginViewController 将如何保留它的委托。我明白为什么不能:它只是一个指针!所以我尝试了各种派生委托的方法:

  1. 恢复类:遗憾的是,作为一个类方法,viewControllerWithRestorationIdentifierPath:coder:并不能帮助我指出我具体呈现的视图控制器。
  2. 在 Storyboard 中将我的演示 VC 设置为我的模态 VC 代表:Xcode 不允许我绘制这种连接,即使我的演示 VC 的类TNTLogingViewControllerDelegate>在其标题中公开采用了该协议。这可能是一个单独的问题,或者这可能是不允许的。
  3. 使用 application-delegate-levelapplication:viewControllerWithRestorationIdentifierPath:coder:将一个模态视图控制器及其委托集返回给我正在呈现的视图控制器。我必须能够从 App Delegate 派生出展示的 VC,但它可能会起作用。

我现在选择#3,但如果有人可以推荐更好的解决方案,我会很高兴。

会产生类似问题的设置:

  1. 设置数据源,比如表格视图。
0 投票
2 回答
794 浏览

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>!

这是不同的东西。

0 投票
2 回答
347 浏览

objective-c - 从按钮事件中添加的状态保存和恢复 UIImageView

我正在添加UIImageView按钮单击。我想使用UIKit. 我在以下位置获得恢复标识符:

我该如何解码UIImageView

0 投票
0 回答
1875 浏览

ios - 带有 xcode 5 的 ios 7 中的状态保存和恢复

我正在尝试在我的应用程序中实现状态保存和恢复机制,因为我在 appDelegate 中实现了以下两种方法,还在情节提要中为我的每个 viewController 提供了恢复 ID,我面临的问题是,当我重新打开应用程序时,我可以看到我以前的或恢复的屏幕,但只有一秒钟,然后它移动到主故事板文件的基本视图控制器。

请向我建议解决方案,或者如果我在这里弄错了什么。请耐心等待回复。提前致谢。

更新部分:

我在我的应用程序委托中使用以下方法 NSString * const AppDelegateRootVCKey = @"AppDelegateRootVCKey";

我的应用程序初始化部分也在 willFinishLaunchingWithOptions 中,我的 didFinishLaunching 如下

我通过情节提要向所有控制器提供了恢复标识符,也通过代码向我的其他 .xibs 提供了恢复标识符。所以现在上述事情的结果是,每当我在情节提要屏幕上时,它都会保留我的状态,但是如果我点击标题上的后退或其他按钮来打开我的左侧/右侧菜单屏幕,它就会崩溃,原因是无法识别的选择器。崩溃后,如果我再次重新打开它,它会从 mainStoryboard 开始,然后一切正常。另一个问题是,每当我使用我的 xib 屏幕进行测试时,它都不会保留应用程序状态,并从 mainStoryboard 重新启动应用程序。

0 投票
0 回答
183 浏览

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.

0 投票
1 回答
116 浏览

ios - 应用在后台时,如何判断应用是被用户关闭还是被IOS关闭

我正在致力于国家保护。如果我想保留我的应用程序的状态

1..在后台时,由于内存不足被IOS杀死

如果我不想保留状态

2..当它在后台时,它被用户杀死

3..当它在前台时,它被用户杀死

正如@matt 所说,1 和 3 可以很容易区分:当应用程序处于前台时,如果它被用户杀死,则不会保留状态;应用程序的状态在它进入后台时被保留。

我的问题是:当一个应用程序已经在后台时,如何确定它是被IOS杀死还是被用户杀死。

0 投票
2 回答
648 浏览

ios - IOS状态保存:我可以显示启动图像而不是快照吗

问题:使用 IOS 状态保存时,如何在启动过程中显示自定义启动图像而不是快照

描述:我正在做IOS状态保存。一切都很好,除了每次我在杀死它后重新打开应用程序时,应用程序显示的第一件事是应用程序进入后台时的屏幕快照。我有一个显示用户当前位置的地图视图。我不希望应用程序在启动过程中显示旧位置的快照,然后跳转到当前位置。是否有一些方法可以在启动过程中显示自定义启动图像。

0 投票
2 回答
717 浏览

ios - Xcode:退出后视图控制器的故事板和状态保存

我是 Xcode 编程新手,我的应用程序(待办事项列表)有问题。一切正常,但是当应用程序退出(未最小化)时,主视图控制器不会保存上面的内容(如果您有 ToDo 列表,则会出现问题)。现在我想知道我必须实现哪些代码才能在退出时保留视图控制器的状态以及在哪里?(应用程序委托或在我的主视图控制器窗口中)

.m 文件:

.h 文件:

0 投票
1 回答
1177 浏览

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没有显示的问题。我将恢复标识符设置为此模态导航控制器,但视图未显示。

0 投票
1 回答
360 浏览

ios - UIManagedDocument 中 Core Data 对象的状态保存和恢复策略

我开始尝试向我的 iOS 应用程序添加对状态保存和恢复的支持,该应用程序有一个核心数据组件,我可以通过 UIManagedDocument 访问它。

我开始将恢复标识符添加到我的视图控制器中,并在我的 AppDelegate 和控制器中连接了所需的功能(当前为空)。

我有一个可能被多个视图控制器引用的对象,因此我计划尝试在我的 AppDelegate 中保留和恢复它,并让相关的视图控制器从 AppDelegate 检索对象。这样做的时机可能很棘手,因为应用程序委托方法 didRecodeRestorableState 在所有视图都已经调用了它们自己的 decodeRestorableStateWithCoder 方法之后发生。

我的主要问题是这个共享类以及多个 ViewControllers 都希望保留和恢复 NSManagedObject 属性。我希望能够使用对象的 URIRepresentation 来促进这一点,但我遇到的问题是我的 AppDelegate 将在我的 AppDelegate 的 willFinishLaunchingWithOptions 方法中打开我的 UIManagedDocument。它通过 UIManagedDocument openWithCompletionHandler 方法执行此操作。由于此打开的线程,在我的所有视图和应用程序委托都已尝试恢复其保存状态后,文档已成功打开。一旦文档准备好使用,AppDelegate 就会发送通知,因此我所有的视图控制器都可以收听此通知。

我想我只是想知道这是最好的,甚至是处理这个问题的唯一策略。我的对象需要保留它们恢复的 URIRepresentations,并且只有在文档(以及它的 NSManagedObjectContext)准备好后,才能尝试实际查找并设置它们保存的相应 NSManagedObjects。因此,恢复比执行恢复的调用要晚很多,我假设通常会执行所有恢复工作。我担心控制器在等待文档打开然后正确初始化时是否可能会在短时间内显示为空。

在这种情况下,是否有任何目的阻止和延迟打开我的文档,所以是的,应用程序需要更长的时间才能打开,但至少可以在任何视图出现之前更正确地恢复所需的所有数据。是否有任何计时器正在运行以确保某些方法不会花费太长时间?当我们处于这种不确定状态时显示不同的视图会更正确吗联系。

到目前为止,我似乎无法在文档中找到对此类问题的任何真正解释。

一如既往地非常感谢任何帮助!干杯