2012-04-05 45 views
1

私は常にユーザがログインしている必要があるアプリを開発中です。最初はログインビューがあり、ユーザーがログインしたときにこれがタブバービューに置き換えられます。私のデバイス(iOS 5.0)または5.0シミュレータにビルドするとうまく動作します。しかし、4.3シミュレータをビルドすると、私は奇妙な問題が発生します。iOS 4.3シミュレータで表示が正しく表示されない

たとえば、最初に開いた最初のタブにはログインビューが含まれていました。まだ削除していないので、そのタブが開くとすぐにログインビューからメニュー画面にフェードします(どちらも第1タブ内の別個のビューである)。 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では正常に動作事実は、本当に私は、これは違っ行うことができるか見当がつかないので、私はアプリの開発にはかなり新しいよ、私を投げているものです。 誰かが何か考えがあるなら、私は非常に感謝しています。 ありがとう

答えて

0

いつものように、私はそれを見て、諦めて助けを求めることにしました。そして、約30分後にそれをやり遂げる方法を実現しました。

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

は、その後、私はちょうど使用します:

[lvc.view removeFromSuperview]; 

私は(つまり、上部のログインビューを置く)Iセットアップタブバーの後にこれを入れて、ビューコントローラとして設定します一度私がログインしていればそれを削除してください。なぜ、他の方法がiOS 4.3でうまくいかなかったのかまだ分かりません。誰かが答えを提供できるなら、私はまだ正しい答えをマークします。将来同じ問題が発生します。

関連する問題