3

このチュートリアルに従ってテストアプリを実行しました

ストーリーボードを使わずに同じことをしようとしていますが、うまくいきません。AppDelegateで状態の保存と復元を有効にしました。すべてのコントローラーとそのビューにrestorementIdentifierを割り当てました。rootviewcontrollerを復元するには、AppDelegateに追加のコードを実装する必要があると思いますが、これを行う正しい方法を見つけることができません。

-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
    return YES;
}

-(BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
    return YES;
}


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    UIViewController *viewController1 = [[[StateTestFirstViewController alloc] initWithNibName:@"StateTestFirstViewController" bundle:nil] autorelease];
    UIViewController *viewController2 = [[[StateTestSecondViewController alloc] initWithNibName:@"StateTestSecondViewController" bundle:nil] autorelease];
    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.restorationIdentifier = @"TabBarController";
    self.tabBarController.viewControllers = @[viewController1, viewController2];
    self.window.rootViewController = self.tabBarController;

    [self.window makeKeyAndVisible];

    return YES;
}
4

2 に答える 2

5

application:willFinishLaunchingWithOptions:実際には、View Controller は と の間で復元されるapplication:didFinishLaunchingWithOptions:ため、コードを次のように変更すると:

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    UIViewController *viewController1 = [[[StateTestFirstViewController alloc] initWithNibName:@"StateTestFirstViewController" bundle:nil] autorelease];
    UIViewController *viewController2 = [[[StateTestSecondViewController alloc] initWithNibName:@"StateTestSecondViewController" bundle:nil] autorelease];
    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.restorationIdentifier = @"TabBarController";
    self.tabBarController.viewControllers = @[viewController1, viewController2];
    self.window.rootViewController = self.tabBarController;
    return YES;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {                
    [self.window makeKeyAndVisible];

    return YES;
}

それは私のために働いた。また、 WWDC 2012 セッション 208 — iOS でのアプリケーションの状態の保存と復元もご覧になることをお勧めします。

于 2013-05-31T23:39:01.590 に答える
4

これを実装しようとしてもかなりの問題がありました。

まず、絵コンテでこの作品を作ることに成功しましたか?

コードは見栄えがよく、要件は 2 つしかないため、他に何も必要ありません。

  1. AppDelegate で shouldRestoreApplicationState と shouldSaveApplicationState を YES に設定します。
  2. 復元 ID をすべての UIViewControllers に設定します (UIViews は必要ありません)。

アプリを「殺す」方法に注意を払うことをお勧めします。

シミュレーターで:

  • シミュレーターのホームボタンを押します。
  • Xcode でアプリを停止します。
  • Xcode でアプリを再生します。

実際、マルチタスク バーからアプリを終了するとすぐに、システムはアプリケーションの状態を削除します。

マルチタスク バーを使用して正常に動作させたい場合は、Info.plist ファイルで「アプリケーションはバックグラウンドで実行されません」を YES に設定する必要があります。

それが役に立てば幸い ;)

于 2012-12-09T11:37:15.813 に答える