6

我只是想在我的一个应用程序中实现 iOS 状态恢复 API。在终于让它工作之后,我发现我以模态方式呈现的 ViewController 使用动画恢复了,这不是我想要的。我希望我的应用程序处于我离开它的状态,但没有让用户看到他到达那里很热。

所以我继续下载了 Apple 示例代码:https ://developer.apple.com/library/ios/samplecode/StateRestore/Introduction/Intro.html并想看看它是否也发生在那里。事实证明确实如此。

此外,日志中还有一条警告:

Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x7b0512b0>.

你能告诉我我和 Apple 的示例代码是否做错了什么,或者它是否是 iOS 中的错误?

顺便提一句。我在iOS8上测试

感谢您的帮助,乔治

4

3 回答 3

19

以下解决方案直接来自 Apple。

在您的应用程序委托中,您应该实施application:willFinishLaunchingWithOptions:(代替或补充didFinishLaunching)。在您的实现中,可能作为返回之前的最后一行true(如果这是 Objective-C,则为 YES),插入以下行:

self.window?.makeKeyAndVisible()

或者,如果这是 Objective-C:

[self.window makeKeyAndVisible];

事实证明,这总是需要的,但文档从来没有明确过。

于 2014-10-27T16:08:55.277 回答
1

来自文档: 在启动时保留应用程序的视觉外观

请参阅下面清单中的第 3 项。

实施国家保护和恢复的清单

支持状态保存和恢复需要修改您的应用程序委托和视图控制器对象来编码和解码状态信息。如果您的应用程序有任何自定义视图也具有可保存的状态信息,那么您也需要修改这些对象。

在您的代码中添加状态保存和恢复时,请使用以下列表来提醒您需要编写的代码。

  • (必需)在您的应用委托中实现 application:shouldSaveApplicationState: 和 application:shouldRestoreApplicationState: 方法;请参阅在您的应用程序中启用状态保存和恢复。

  • (必需)通过将非空字符串分配给它们的restoreIdentifier 属性,将恢复标识符分配给要保留的每个视图控制器;请参阅标记您的视图控制器以进行保存。

    如果您也想保存特定视图的状态,请将非空字符串分配给它们的 restoreIdentifier 属性;请参阅保留视图状态。

  • (必需)从应用程序显示您的应用程序窗口:willFinishLaunchingWithOptions:您的应用程序委托的方法。状态恢复机制需要窗口,以便它可以恢复应用程序界面的滚动位置和其他相关位。

  • 将恢复类分配给适当的视图控制器。(如果
    您不这样做,您的应用程序委托将被要求在恢复时提供相应的视图控制器。)请参阅 在启动时
    恢复您的视图控制器。

  • (推荐)使用这些对象的 encodeRestorableStateWithCoder: 和 decodeRestorableStateWithCoder: 方法对视图和视图控制器的状态进行编码和解码;请参阅编码和解码您的视图控制器的状态。
  • 使用应用程序委托的 application:willEncodeRestorableStateWithCoder: 和 application:didDecodeRestorableStateWithCoder: 方法对应用程序的任何版本信息或附加状态信息进行编码和解码;请参阅保留应用程序的高级状态。

  • 充当表视图和集合视图的数据源的对象应实现 UIDataSourceModelAssociation 协议。尽管不是必需的,但此协议有助于在这些类型的视图中保留选定的和可见的项目。请参阅实现保存友好的数据源。

于 2017-03-17T16:08:16.047 回答
-1

Apple 示例代码似乎在 Xcode 8 上运行良好。

所以我想不需要额外的代码更改

于 2016-10-21T03:40:29.793 回答