簡體   English   中英

如何在通用UIViewController中僅為iPAD創建IBOutlet-通用應用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM