iPhone DropBox应用程序就像实现一样 - 翻转标签栏以显示登录屏幕

时间:2010-08-16 13:01:12

标签: iphone uitabbarcontroller uiapplicationdelegate

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

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

当用户第一次登录时,我正在使用[[UIApplication sharedApplication]委托]调用来获取app委托的实例。这样我就可以访问作为Application Delegate一部分的tabBarController(大部分时间都是这样)。但是,当我尝试从设置中的logout选项(在未来生命周期的某个地方)调用我的loginViewController时,相同的调用[[UIApplication sharedApplication]委托]返回一个委托,我无法使用任何方法有定义。它在运行时给我“无法识别的选择器发送到实例”错误。

我需要了解调用[[UIApplication sharedApplication]委托]的确切内容是什么?它返回的委托对象是否在应用程序生命周期内发生了变化?或者它是整个应用程序生命周期中的单例实例吗?

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

由于 开发。

1 个答案:

答案 0 :(得分:1)

听起来你的类获取你的单例委托的实例并不知道它实现了什么。确保您#import将您的代理人[[UIApplication sharedApplication] delegate]改为使用{{1}}的类。此外,如果您收到有关UIApplication不符合要求的警告,您可以将其转换为AppDelegate类型以避免它。

要回答有关此调用返回的问题,它在应用程序的整个生命周期中都是单例。

要回答第二个问题,在UIWindow(因此在appdelegate中)拥有它很好,并且可能受到鼓励,因为它是你的应用程序的根控制器(来自事物的声音)