2013-09-21 13 views
13

我得到了我的iOS项目这样的警告:(iOS7时,Xcode 5 GM)隐秘的警告没有任何谷歌的结果[在模拟器]

警告:无法创建进度标记文件恢复

我正在研究一个viewcontroller,当我在启动时得到这个警告时,它会变成全黑。 删除应用程序并重新启动XCode有时似乎有所帮助。我在两个

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

UPDATE1返回NO:我上的iPhone4s测试。同样的结果。警告和黑屏在我的视图控制器上。

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

+0

我得到这样的警告,以及,不知道原因是什么 –

+0

是如何的视图控制器产生的?他们是在故事板,或笔尖,或者您的应用程序委托中创建的,或... – Greg

+0

我使用的分镜与导航视图控制器作为其基地。我正在尝试整合国家恢复。即使在应用程序重新启动时也会显示此消息(已删除并再次部署)。 –

回答

1

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

更有趣的部分是黑屏。 当你在内部有一个正常的ViewController和一个TableView时会发生这种情况。 我不得不在ViewController的视图属性和基本视图之间创建两个插座(除了表视图有更多视图,这就是我必须使用通用视图控制器的原因)。自动与每个ViewController有一个连接,所以这真的很奇怪。我认为这又是一些iOS错误。

3

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

Attributes inspector of main scene in storyboard

UPDATE

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

The State Preservation and Restoration Guide

+0

我已经这样做了。否则,我会一直黑屏。只有当我以模态方式显示特定的一个时,我才能得到它。 –

+0

我只有一个NavController作为我的基础,我已经设置了它的恢复ID。 http://img13.imageshack.us/img13/4611/amtw.png –

+2

@EvgeniPetrov - 除了控制器级别之外,您还需要恢复tableview和其他视图的恢复ID吗?这个博客做了一个解构示例的好例子(http://useyourloaf.com/blog/2013/05/21/state-preservation-and-restoration.html) –

1

添加

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 协议,并负责寻找或创造一个指定的 对象恢复时间。下面是一些提示何时使用每个:

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

2)查看 控制器未从主要故事板文件加载到 启动时间,请分配恢复类。最简单的选项是 使每个视图控制器自己的恢复类。

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

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

永远不会在我的应用程序中调用,并且恢复工作没有警告或错误。

我想明白这个问题,到底是怎么回事。我希望这可以帮助你,并欢迎评论澄清问题。 :)