iOS状态恢复动画bug

时间:2014-10-20 08:46:27

标签: ios state-restoration

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

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

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

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

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

顺便说一下。我在iOS8上测试

感谢您的帮助, 乔治

3 个答案:

答案 0 :(得分:20)

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

在您的应用委托中,您应该实施application:willFinishLaunchingWithOptions:(代替didFinishLaunching)或者除了true之外。在您的实现中,可能是在返回self.window?.makeKeyAndVisible() 之前的最后一行(如果这是Objective-C则为YES),请插入以下行:

[self.window makeKeyAndVisible];

或者,如果这是Objective-C:

{{1}}

事实证明,总是需要,但文档从未明确过。

答案 1 :(得分:1)

来自文档: Preserving Your App’s Visual Appearance Across Launches

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

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

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

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

  • (必需)实现应用程序:shouldSaveApplicationState:和 application:shouldRestoreApplicationState:应用程序中的方法 代表;看你的国家保持和恢复 应用
  • (必需)为每个视图控制器分配恢复标识符 希望通过为其中指定非空字符串来保留 restorationIdentifier属性;请参阅标记视图控制器 保存。

    如果您还要保存特定视图的状态,请指定非空 字符串到他们的restorationIdentifier属性;见保留 你的观点的状态。

  • (必填)显示您应用的窗口 应用程序:willFinishLaunchingWithOptions:您的应用程序的方法 代表。国家恢复机械需要窗户才能实现 可以恢复滚动位置和应用程序的其他相关位 接口

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

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

  • 充当表视图和集合视图的数据源的对象 应该实现UIDataSourceModelAssociation协议。虽然 不需要,此协议有助于保留选定和可见 这些类型的视图中的项目。请参阅实施保护友好 数据来源。

答案 2 :(得分:-1)

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

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