[英]How to create IBOutlet only for iPAD in a common UIViewController - Universal App
我有2個xib,一個用於iPad,一個用於iPhone。 但是,目前我只有一個適用於iPhone和iPad的2個xib的視圖控制器。
在我的iPad Xib內,我有一個不屬於iPhone xib的IBOutlet。 我應該如何定義那個出口? 我注意到,如果我放入我的deallc方法,則如下所示:
-(void) dealloc
{
[outletOnlyForIpad release]
}
該應用程序在iPhone上崩潰。 顯然是因為它在iPhone上無法很好地實例化。 (我希望它保持零,但事實並非如此)
我沒有找到可以使用的任何預處理器宏,因此我只能為iPad聲明該Outlet。 唯一的方法是通過檢入運行時類似:
isIpad()
[outletOnlyForIpad SomeMethodOnTheOutlet]
在控制器的每個地方?
您必須在運行時檢查設備並處理插座,然后再使用單獨的插座。
如果我在不同設備上創建具有不同控件的應用程序,則傾向於以編程方式創建它們,以避免諸如此類的連接問題。
您的代碼是正確的。 該出口應該保持nil
,因此向其發送release
消息應該是無害的。 建議您不要檢查此插座的位置,並解決問題的原因,而不是解決該錯誤。 您確定您沒有在iPhone筆尖中連接任何東西嗎?
在您的dealloc中,以避免在iPhone上崩潰,然后像平常一樣在iPad xib中連接IBOutlet:
-(void) dealloc
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[outletOnlyForIpad release]
}
}
初始化類時,所有實例變量都會自動初始化為零。 因此,這等效於添加:
outletOnlyForIpad = nil;
給你的init
方法。
當為iPad而非iPhone加載視圖時,此nil
值將被覆蓋(除非您有其他代碼對其進行設置)。 但是,您的[outletOnlyForIpad release]
崩潰表明, outletOnlyForIpad
並不nil
,這意味着某些東西為其賦予了價值。 您需要找出這是什么-它可能是您的界面生成器文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.