2010-08-16 46 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