我正在开发一个要求用户始终登录的应用程序。最初它有一个登录视图,当用户登录时,它被一个标签栏视图替换。如果我构建到我的设备(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 中运行良好的事实让我感到非常震惊,我对应用程序开发还很陌生,所以我不知道如何以不同的方式做到这一点。如果有人有任何想法,我将不胜感激。谢谢