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

ios - 自定义容器视图控制器状态保存

我需要创建带有标签和 2 个状态 A 和 B(每个状态由子视图控制器呈现并相互交换)的自定义容器视图控制器。当父容器创建时,两个子视图控制器都会实例化,并且 currentViewController 默认为 viewControllerA。所以我在容器视图控制器中有这样的东西:

我需要保留容器视图控制器的状态。问题是我必须在第一次创建容器视图控制器和恢复过程时实例化和添加子视图控制器?我必须在哪里恢复儿童视图控制器?

我找到了很多候选人:

用于恢复过程。

关于这个主题的一些想法。如果使用initWithCoderandviewDidLoad来创建子视图控制器并将当前视图控制器作为子视图添加到容器视图控制器中,那么在恢复过程之后我需要更改当前视图控制器并在必要时交换它,我认为有什么问题。如果viewWillAppear用于添加当前的viewcontroller,那么恢复过程是正常的,但是这个方法可能会被多次调用。

我认为有两种方法可以恢复恢复子视图控制器:

  1. 实例化viewDidLoad并恢复(-(void)decodeRestorableStateWithCoder:(NSCoder *)coder[self.viewControllerA decodeRestorableStateWithCoder:coder]在这里看到了 - https://stackoverflow.com/a/16647606/2492707

  2. 完全恢复-(void)decodeRestorableStateWithCoder:(NSCoder *)coder喜欢self.viewControllerA = [coder decodeObjectForKey: @"AKey"];

哪种方式更好?

了解 UINavigationController (填充了 visibleViewController )的恢复过程也可以帮助我。

提前致谢。

0 投票
1 回答
271 浏览

ios - iOS State Restoration

I am fairly new to iOS development and I am trying to understand the State Restoration API. Without implementing the APIs in my application, when the application is exited and resumed it does restore the state of the application to the way it was before the user exited. If this is not State Restoration, then what mechanism is this? And how is it different than State Restoration? Why should I implement state restoration when the default mechanism seems to do what I need.

I'm sure that I'm just not understanding something, but I don't know what it is.

0 投票
1 回答
258 浏览

ios - 如何在 iOS 5 中管理状态保存和恢复

我一直在查看iOS App Programming Guide中的“State Preservation and Restoration”部分,那里描述的过程似乎仅适用于 iOS 6。由于我需要使我的应用程序与 iOS 5 兼容,我不'找不到一个,比方说,处理这个的等效方法。

为了提供特定的场景,我有一个UINavigationController推送一系列视图控制器的地方,我请求用户输入。它就像一个一步一步的表格,直到最后一步完成后才最终保存提供的数据。我想在用户提供输入时临时保存输入,以防应用程序终止或进入后台,以便在用户返回应用程序时再次显示它们,以防止他不得不再次输入数据他已经提供了。我猜这可能是 iOS 应用程序中的常见场景。

我正在考虑将临时数据保存到文件中,但我不知道这是否是 iOS 5 中独特/最佳的方式。有任何帮助或任何示例/教程/文档处理这个问题吗?

谢谢!

0 投票
2 回答
3260 浏览

ios - 不使用故事板的应用程序状态保存和恢复?

我已经像这样uinavigationcontrollerAppDelegate.m中添加了

我的ViewController.m看起来像这样

我的secondViewController.m喜欢

在输出

我得到了 encodeRestorableStateWithCoder 但是之后当我按下主页按钮然后再次运行应用程序时,我的应用程序状态不存在 secondViewController 并且 decodeRestorableStateWithCoder 没有被调用。

我不知道我在哪里做错了?

0 投票
2 回答
2853 浏览

ios - 恢复 ViewController 状态的最佳方法是什么

我想就如何恢复 viewControllers 状态提出一些建议。就像在名为“Pic Collage”的应用程序中创建卡片并保存并稍后恢复它一样。

0 投票
3 回答
2848 浏览

objective-c - 为什么我不能在 NSKeyedArchiver 中编码 NSValue?

我试图将一个MKMapView中心和跨度编码为一个NSKeyedArchiver状态保存。我发现了一些方便的新 MapKitNSValue添加,valueWithMKCoordinate:以及valueWithMKCoordinate:. 尝试将这些编码到键控存档器中失败:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSKeyedArchiver encodeValueOfObjCType:at:]:此归档器无法编码结构”

我知道这个问题的解决方案是将单个双打编码为四个单独的键。

我的问题是为什么会发生这种情况。AnNSValue是一个对象,为什么它告诉我“这个归档器不能编码结构”

0 投票
1 回答
1687 浏览

ios - viewControllerWithRestorationIdentifierPath:coder: 如何找到现有实例?

上的文档viewControllerWithRestorationIdentifierPath:coder:说:

您的此方法的实现应该创建(或找到)相应的视图控制器对象并将其返回......在您的此方法的实现中并不总是需要创建一个新的视图控制器对象。您还可以返回由其他方式创建的现有视图控制器对象。例如,如果视图控制器已经从情节提要文件中加载,您将返回该对象而不是创建一个新对象。[我的斜体。]

对我来说,这似乎完全是胡说八道。这是一个类方法!目前我们无权访问任何实例——除非我们创建一个。如果有人能向我解释一个类方法究竟如何找到或了解“已经从情节提要文件中加载的视图控制器”,我将不胜感激。

编辑:要获得赏金,您必须从您自己的应用程序中向我展示一个实际案例,该类方法viewControllerWithRestorationIdentifierPath:coder:用于“返回由另一种方式创建的现有视图控制器对象”。

0 投票
0 回答
114 浏览

ios - iOS state preservation for an application needing login

My app has four states each using its own root view controller and I only need to restore the views for the online state but need to go through the three other states on startup for doing the login and loading the app content.

I have it working for a simple app based on the UITabBarController which works perfectly. But there I can instantiate the view controllers in the application:willFinishLaunchingWithOptions: without a problem as I always have the same.

I'm struggling to move this concept over from the static number of view controller example to the dynamic context of my real application.

What I would like to have is some sort of delayed instancing of my view controllers so they are instantiated once the session context is recreated. But as far as I see this is not possible with the api.

I think my conceptual problem is that at the moment when application:viewControllerWithRestorationIdentifierPath:coder: the login to the server is not yet done. So I cannot setup my dao objects to load the dynamic content I would need to create the view controllers.

Shorty I was also thinking about just saving the dynamic data from the server with the app state so I could redisplay it, and then do the login behind the scene and merge the data with the real data from the server. But this approach does sound hacky and merging the data displayed with the real data from the server also creates a lot of issues. And it is discouraged by the documentation as well.

At the moment I'm actually thinking to record all calls to the application:viewControllerWithRestorationIdentifierPath:coder: method and record the data so I could use it later when I'm ready to create the actual view controllers, but I have the feeling that this is not the intention on how to use this api.

Does anybody have some direction for me?

0 投票
1 回答
351 浏览

iphone - 没有 Storyboard 的 Tabbar 的保存和恢复

我正在使用 iOS 6 Preservation and Restoration(没有 Storyboard),它与导航控制器一起工作正常,但是如果我在主窗口上手动添加 Tabbar 控制器,我没有得到选中的选项卡。

例如。

在他的情况下,我每次都会选择第一个选项卡。我已经植入

用于设置视图控制器。

0 投票
2 回答
1964 浏览

ios - iOS 保留 UIWebView 的状态?

是否可以在当前应用启动时保留 UIWebView 的状态(例如当前网页、后/前列表)?例如,如果我解除了 webview 的分配,并且在将来的某个时候,我想重新创建它 - 是否可以给它先前的状态?