神秘的警告没有任何谷歌的结果

我在iOS项目中得到了这个警告:(iOS7,XCode 5 GM)

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

我正在开发一个视图控制器,当我得到这个警告启动时变黑。 删除应用程序并重新启动XCode有时似乎有所帮助。 我两个都没有返回

-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState: -(BOOL)application:(UIApplication *)application shouldSaveApplicationState: 

Update1:​​我在iPhone4上testing。 同样的结果。 警告和我的视图控制器上的黑屏。

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

请确保您将视图控制器设置为故事板文件中的初始视图控制器。 你会在属性检查器中find这个设置。

主要场景的属性检查员在故事板

UPDATE

这听起来像你可能没有添加一个恢复ID到导航控制器本身,而是可能已经在子视图控制器上设置恢复ID。 如果是这种情况,您应该将恢复ID添加到缺less的控制器。

国家保存和修复指南

我还没有find为什么这个消息打印在控制台,但我认为这是在iOS的某种错误。 随着最新的iOS 7更新,我没有得到“警告:无法创build恢复进行中的标记文件”了。

更有趣的部分是黑屏。 这发生在你有一个正常的ViewController和一个TableView里面 。 我不得不在ViewController的视图属性和基本视图之间创build两个网点(除了表视图有更多的视图,这就是我不得不使用通用视图控制器的原因)。 每个ViewController自动有一个连接,所以这真的很奇怪。 我认为这又是一些iOS错误。

添加

UIViewControllerRestoration

为我解决了它。 如果你点击协议参考,它会说:

 // A class must implement this protocol if it is specified as the restoration class of a UIViewController. @import UIKit; @interface AppDelegate : UIResponder <UIApplicationDelegate, UIViewControllerRestoration> @property (strong, nonatomic) UIWindow *window; @end 

在文档中写道:

恢复类实现UIViewControllerRestoration协议,负责在还原时查找或创build指定的对象。 以下是关于何时使用每一个的一些提示:

1)如果视图控制器始终在启动时从应用程序的主要故事板文件加载,请不要指定恢复类。 相反,让你的应用程序委托find对象或利用UIKit的支持隐式find恢复的对象。

2)对于在启动时未从主要故事板文件加载的视图控制器,分配一个恢复类。 最简单的select是使每个视图控制器自己的恢复类。

到目前为止,我已经这样理解了。 没有UIViewControllerRestoration协议,appDelegate不是恢复类(1)。 该警告因此在应用程序开始(恢复时间)时写入。 应用程序委托不能以某种方式find需要分配给标记文件的对象。 问题出在appDelegate。 当应用程序委托变成恢复类时,它跳过步骤1)并继续步骤2)。 看来,AppDelegate成为所有其他视图的主要恢复类。 以下方法:

 + (UIViewController*) viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents coder:(NSCoder *)coder {} 

从来没有在我的应用程序中调用,修复工作没有警告或错误。

我想了解这个问题和发生了什么事情。 我希望这对你有帮助,欢迎大家澄清问题。 🙂