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

像往常一样,我花了很长时间看着它,放弃并决定寻求帮助,然后在大约半小时后意识到了一种方法。

我只是在设置选项卡栏并将其设置为视图控制器(即,将登录视图放在顶部)之后放置它:

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

然后我只使用:

[lvc.view removeFromSuperview];

登录后将其删除。仍然不知道为什么其他方式在 iOS 4.3 中不起作用,所以如果有人可以提供答案,我仍然会标记一个正确的答案 - 以防其他人将来有同样的问题。

于 2012-04-05T17:48:42.030 回答