0

次のように、アプリのデリゲートに RootViewController を作成しました。

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

    StartViewController *viewController = [[StartViewController alloc] init];
    StartNavigationController *navigationController=[[StartNavigationController alloc] initWithRootViewController:viewController];
    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
}

ログアウト ボタンを押したら、ユーザーを rootview コントローラーに送り返したいと思います。

- (IBAction) logoutButtonPressed:(UIButton *)sender
{
    [Users logOut];

    [self.navigationController popToRootViewControllerAnimated:YES];
}

これは、iPhone 4s で実行すると問題なく動作しますが (iPhone 6 が到着したらテストします)、ユーザーを 1 日以上ログインさせたままにし、ログアウト ボタンをクリックすると、画面が黒くなります。

ルート ビュー コントローラーが 24 時間ほど経過しても startviewcontroller を呼び出さないのはなぜですか?

4

1 に答える 1

1

私は答えを出そうとしていますが、それはあなたにとってうまくいくはずです。まずStartViewController、navigationController スタックに存在するかどうかを確認します。スタックごとStartViewControllerに、最初に追加されたコントローラーにする必要がありますnavigationController

StartViewController *loginController=[self.navigationController.viewControllers objectAtIndex:0];


if(loginController){
   [self.navigationController popToViewController:loginController animated:YES];
}else{
    NSMutableArray *controllers=[[NSMutableArray alloc] init];

   loginController=[[StartViewController alloc] initWithNibName:@"StartViewController" bundle:nil];
    [controllers addObject:loginController];
    [controllers addObjectsFromArray:self.navigationController.viewControllers];
    self.navigationController.viewControllers=[[NSArray alloc] initWithArray:controllers];
    [self.navigationController popToRootViewControllerAnimated:YES];
}

うまくいくはずだと思います。

乾杯。

于 2014-11-11T04:48:09.167 に答える