13

我在我的 iOS 项目中收到此警告:(iOS7,XCode 5 GM)

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

我正在开发一个视图控制器,当我在启动时收到此警告时会变成全黑。删除应用程序并重新启动 XCode 有时似乎会有所帮助。我都拒绝

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

Update1:​​我在 iPhone4s 上测试过。结果相同。我的视图控制器上出现警告和黑屏。

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

4

3 回答 3

3

请确保将视图控制器设置为情节提要文件中的初始视图控制器。您将在属性检查器中找到此设置。

故事板中主要场景的属性检查器

更新

听起来您可能没有向导航控制器本身添加恢复 ID,而是可能在子视图控制器上设置了恢复 ID。如果是这种情况,您应该将恢复 ID 添加到丢失的控制器。

国家保护和修复指南

于 2013-10-02T03:19:10.927 回答
1

我还没有找到为什么会在控制台中打印此消息,但我认为这是 iOS 中的某种错误。随着最新的 iOS 7 更新,我不再收到“警告:无法创建正在进行的恢复标记文件”。

更有趣的部分是黑屏。 当你有一个普通的 ViewController 和一个 TableView 里面时,就会发生这种情况。我必须在 ViewController 的视图属性和基本视图之间创建两个出口(除了表视图还有更多视图,这就是我必须使用通用视图控制器的原因)。每个 ViewController 都会自动建立一个连接,这真的很奇怪。我认为这又是某种 iOS 错误。

于 2013-11-22T10:06:42.237 回答
1

添加

UIViewController 恢复

为我解决了。如果您单击协议参考,它会显示:

// 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 协议,负责在恢复时查找或创建指定对象。以下是有关何时使用每种方法的一些提示:

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

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

到目前为止,我是这样理解的。如果没有 UIViewControllerRestoration 协议,appDelegate 就不是恢复类 (1)。因此,警告会在应用程序启动时写入(恢复时间)。应用程序委托无法以某种方式找到需要分配给标记文件的对象。问题出在 appDelegate 中。当应用程序委托成为 restoreClass 时,它会跳过第 1 步)并进入第 2 步)。似乎 appDelegate 成为所有其他视图的主要恢复类。以下方法:

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

在我的应用程序中从未调用过,并且恢复工作不会出现警告或错误。

我想了解问题以及发生了什么。我希望这对您有所帮助,欢迎评论以澄清问题。:)

于 2014-12-16T09:50:21.513 回答