ストーリーボードを使用してアプリケーションを開発しています。このアプリケーションは、ユーザーがログインする必要があります。
ストーリーボードには、初期設定としてログイン ビューがあります。ログインに成功すると、TabViewControllerへのセグエが実行されます。
API を呼び出すたびに、サーバーが 401 (許可されていない) を返すかどうかを確認します。これが発生した場合、ブール値は false (ブール値 isLogged) に設定されます。AppDelegate はこのブール値を観察します。値が false に変更された場合、ユーザーをログイン画面に戻したい (ストーリーボードの最初のビューを思い出してください)。
ここにいくつかのコードがあります:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"isLogged"]) {
BOOL logged = [[change objectForKey:NSKeyValueChangeNewKey] boolValue];
if (logged) {
NSLog(@"Logged in succesfully!");
} else {
NSLog(@"Logout performed");
[self.window makeKeyAndVisible];
[self.window layoutSubviews];
}
}
これは正常に機能しますが、再度ログインしようとすると、LoginOKセグエが実行されません。
私は次のような他の多くのオプションを試しました:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
[source presentModalViewController:loginController animated:YES];
しかし問題は、ログアウトを実行した View Controller がわからないことです。ソースは、アプリケーションに表示されている現在のビュー コントローラーでなければなりませんね。