【问题标题】:iOS 6 Preservation and Restoration without Storyboards没有故事板的 iOS 6 保存和恢复
【发布时间】:2012-10-07 04:57:18
【问题描述】:

我一直在尝试实施状态恢复和保存,但没有任何运气。

我没有使用故事板。我一定是做错了什么。

我为每个 Nib 文件设置了恢复标识符。

我知道状态正在被存储,但从未正确恢复。最后一个状态显示半秒钟,然后返回主视图。我尝试了很多没有运气的事情。请帮忙!

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@"will finish");
    return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];

    navigator = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = navigator;

    [self.window makeKeyAndVisible];
    [navigator release];

    NSLog(@"did finish");
    return YES;
}
// As you can see, I started the process of saving and restoring application state.
// Also, I added the restoration identifier for every class that should be restored.

-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
    NSLog(@"restoring");
    return YES;
}
-(BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
    return YES;
}
-(void)application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder
{
    NSLog(@"restored");
    //navigator = [[UINavigationController alloc] initWithRootViewController:];

    isRestored = YES;
}

【问题讨论】:

  • 我还没有理由致力于集成状态保存/恢复,但我突然想到,您可能会在应用程序中踩到恢复状态:didFinishLaunchingWithOptions: 方法。您的 NSLog() 在控制台中显示的顺序是什么?
  • 克里斯蒂安,谢谢你的回答。 NSLogs 按以下顺序显示:“将完成”“正在恢复”“已恢复”“已完成”我确信您指出的是正确的。问题是我不确定如何解决它。我已经尝试了很多东西。我在 iOS 方面的经验有限。
  • 我试图让它在没有故事板的情况下工作但没有成功。看起来故事板正在处理大量工作,而在代码中执行需要您编写实际的保存代码。不过我可能是错的。 developer.apple.com/library/ios/#documentation/iphone/…

标签: objective-c ios ios6


【解决方案1】:

您应该在application:willFinishLaunchingWithOptions: 中进行控制器初始化,因为恢复是在调用application:didFinishLaunchingWithOptions: 之前完成的。

检查this answer

您还应该以编程方式将 restoreIdentifier 分配给所有控制器。

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2014-01-18
    • 2021-01-12
    • 1970-01-01
    • 2015-11-30
    • 2012-11-08
    相关资源
    最近更新 更多