ユーザーが常にログインする必要があるアプリに取り組んでいます。最初はログイン ビューがあり、ユーザーがログインすると、これはタブバー ビューに置き換えられます。デバイス (iOS 5.0) または 5.0 シミュレーターのいずれかにビルドすると、問題なく動作します。ただし、4.3 シミュレーターにビルドすると、奇妙な問題が発生します。
たとえば、最初に開いたタブには元々ログインビューが含まれていました-まだ削除する準備ができていないため、現時点ではそのタブが開くとすぐにログインビューからメニュー画面にフェードします(両方とも別々です)最初のタブ内のビュー)。iOS4.3 ビルドでは、この最初のビューはフェードアウトしません。
最初の画面をスキップして、ユーザーの Facebook の友達リストがあるメニュー画面に直接最初のタブを開くように再コーディングしました。フレンド リストをコンソールに出力したところ、正しく受信されましたが、リストは iOS4.3 では空に見え、iOS 5.0 では問題なく動作します。個別のログインビューを実装するまで、これらはすべて機能していました(afaik)。ビュー間の変更を正しく実装していないと思いますが、コンソールにエラーが出力されず、タブ間などで変更できるため、どこが間違っているのかわかりません。
これは私がこれまでに行った方法です(関連する部分のみを含めます):
appDelegate.h
@interface AppDelegate : UIResponder <UITabBarControllerDelegate,LoginViewControllerDelegate, otherDelegates>
FirstViewController *viewController1;
SecondViewController *viewController2;
ThirdViewController *viewController3;
FourthViewController *viewController4;
FifthViewController *viewController5;
loginViewController *lvc;
@property (strong, nonatomic) UITabBarController *tabBarController;
...
appDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
lvc = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil];
lvc.delegate = self;
[self.window addSubview:lvc.view];
self.window.rootViewController = lvc;
[self.window makeKeyAndVisible];
}
- (void)loginViewControllerDidFinish:(loginViewController *)loginViewController {
//load windows and tab bar controller
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];
viewController3 = [[[ThirdViewController alloc] initWithNibName:@"ThirdViewiPhone" bundle:nil] autorelease];
viewController4 = [[[FourthViewController alloc] initWithNibName:@"FourthViewiPhone" bundle:nil] autorelease];
viewController5 = [[[FifthViewController alloc] initWithNibName:@"FifthViewiPhone" bundle:nil] autorelease];
[viewController4 updateTabBar];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, viewController3, viewController4, viewController5, nil];
self.window.rootViewController = self.tabBarController;
[self.window addSubview:self.tabBarController.view];
[self.window makeKeyAndVisible];
}
//called when logout button is pressed
- (void)removeTabBarView
{
//[self.tabBarController.view removeFromSuperview];
[self.window addSubview:lvc.view];
self.window.rootViewController = lvc;
[self.window makeKeyAndVisible];
}
編集: これは、すべてのログイン データが受信されると appDelegate で呼び出されます。
[self loginViewControllerDidFinish:lvc];
iOS 5.0 で問題なく動作するという事実は、私を本当に悩ませているものです。誰かに何かアイデアがあれば、私は非常に感謝しています。ありがとう