こんにちは私はタブバーを使用するアプリに取り組んでいます。タブバーには、ユーザーがログインしている場合は5つのタブがありますが、ユーザーがログアウトしている場合は3つだけです。if
MainAppDelegate.mに"uid"
、ユーザーがログインしているかどうかを示す次のようなステートメントがあります。
UIViewController *popular = [[[PopularViewController alloc] initWithNibName:@"PopularViewController" bundle:nil] autorelease];
UIViewController *upcoming = [[[UpcomingViewController alloc] initWithNibName:@"UpcomingViewController" bundle:nil] autorelease];
UIViewController *account = [[[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil] autorelease];
UIViewController *message = [[[MessageViewController alloc] initWithNibName:@"MessageViewController" bundle:nil] autorelease];
UIViewController *more = [[[MoreViewController alloc] initWithNibName:@"MoreViewController" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if([prefs objectForKey:@"uid"]){
self.tabBarController.viewControllers = @[popular, upcoming, account, message, more];
}else{
self.tabBarController.viewControllers = @[popular, upcoming, more];
}
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
ユーザーがログアウトすると、次の操作を行い、ユーザーがログインしている場合にのみ表示されるアカウントとメッセージを削除して、3つのタブに移動します。
NSMutableArray *tbViewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
[tbViewControllers removeObjectAtIndex:2];
[tbViewControllers removeObjectAtIndex:2];
[self.tabBarController setViewControllers:tbViewControllers];
これで、より多くのページにログインが表示されるので、を押すと、新しいViewControllerに移動してログインします。彼らが正常にログインした場合、私は次のことを行います。
タブビューに戻る
[[self presentingViewController] dismissModalViewControllerAnimated:YES];
次に、viewWillAppearで
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if([prefs objectForKey:@"uid"]){
NSMutableArray *tbViewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
[tbViewControllers removeObjectAtIndex:2];
UIViewController *account = [[[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil] autorelease];
UIViewController *message = [[[MessageViewController alloc] initWithNibName:@"MessageViewController" bundle:nil] autorelease];
UIViewController *more = [[[MoreViewController alloc] initWithNibName:@"MoreViewController" bundle:nil] autorelease];
[tbViewControllers addObject:account];
[tbViewControllers addObject:message];
[tbViewControllers addObject:more];
[self.tabBarController setViewControllers:tbViewControllers];
}
問題は、それらがすでにより多くのページにあるため、インデックス2でオブジェクトを削除すると、より多くのページが削除されるため、クラッシュする直前に5つのタブが表示されていても、アプリがクラッシュすることです。だから私の質問は、より多くのタブを削除せずに2つのタブを中央に追加するにはどうすればよいですか?
助けてくれてありがとう!