1

ユーザーが常にログインする必要があるアプリに取り組んでいます。最初はログイン ビューがあり、ユーザーがログインすると、これはタブバー ビューに置き換えられます。デバイス (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 で問題なく動作するという事実は、私を本当に悩ませているものです。誰かに何かアイデアがあれば、私は非常に感謝しています。ありがとう

4

1 に答える 1

0

いつものように、私はそれを見て何年も過ごし、あきらめて助けを求めることに決めました、そしてそれから約30分後にそれをする方法を実現しました。

タブバーを設定してビューコントローラとして設定した後(つまり、ログインビューを一番上に配置した後)にこれを配置します。

lvc = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil];
lvc.delegate = self;
[self.window addSubview:lvc.view];

それから私はただ使用します:

[lvc.view removeFromSuperview];

ログインしたら削除します。iOS4.3で他の方法が機能しなかった理由はまだわかりません。そのため、誰かがそれに答えることができれば、他の誰かがいる場合に備えて、正しい答えをマークします。将来的に同じ問題があります。

于 2012-04-05T17:48:42.030 に答える