2010-08-16 72 views
0

我正在编写一个应用程序,您需要以模态方式显示登录屏幕,并且该应用程序有一个标签栏。iPhone DropBox应用像实现 - 翻转标签栏以显示登录屏幕

我已经添加标签栏直接到UIWindow。将其翻转到一个新的视图(登录视图)我已覆盖applicationDidFinishLaunching我检查用户是否有登录凭据,然后我不显示登录屏幕,否则(假设第一次使用或注销的情况下)我模态地呈现登录屏幕。我已经在应用程序内的设置选项卡中提供了注销选项。

我正在使用[[UIApplication sharedApplication]委托]调用在用户第一次登录时获取应用程序委托的实例。通过这种方式,我可以访问属于应用程序委托的tabBarController(与大多数情况一样)。但是,当我尝试从设置(未来生命周期某处)的注销选项调用loginViewController时,相同的调用[[UIApplication sharedApplication]委托]返回给我一个委托,我无法使用任何方法I已经定义。它在运行时给我“无法识别的选择器发送到实例”错误。

我需要了解究竟调用[[UIApplication sharedApplication]委托]返回的是什么?委托对象是否在应用程序生命周期期间返回更改? OR是整个应用程序生命周期中的单例实例吗?

其次,为了解决这个问题,我应该将tabBar添加到一个视图(包含在主窗口中)中,而不是直接将其添加到UIWindow中(如Tab Bar应用程序的模板所做的,似乎是标准做法) 。这种方法存在任何已知问题,或者可以这样做。任何人都试过这个?请告诉我。

谢谢 Dev。

回答

1

听起来像你的类得到你的单例委托实例不知道它实现了什么。请确保你是#import将你的代表授予使用它的班级[[UIApplication sharedApplication] delegate]。另外,如果你得到一个关于UIApplication不符合的警告,你可以将它转换为你的AppDelegate类型来避免它。

要回答你关于这个调用返回的问题,它是整个应用程序生命周期中的一个单例。

要回答的第二个问题,(在的appdelegate,因此)在一个UIWindow有很细,而且很可能鼓励的,因为这是你的应用程序的根控制器(从事物的声音)

+0

感谢杰西......这些事情之一是你是“脑筋急躁”的,当你第二天早上回来看它时,它的那个愚蠢的陈述[appDelegate发布] ......感谢“过度”的好记忆公民: )...对于浪费你的时间感到抱歉,但如果它有帮助,你确信它返回了同一个单例对象,这让我再次以不同的视角穿过调试器,当我发现它时......再者, UIWindow中的tabBarController确实感觉到了这样做的正确方式,并且很高兴它在没有任何黑客攻击或损害设计的情况下工作:) – Dev 2010-08-17 07:34:12