如何在常见的UIViewController - Universal App中为iPAD创建IBOutlet

时间:2011-11-01 13:23:09

标签: iphone ios ipad uiviewcontroller iboutlet

我有2个xib,一个用于iPad,一个用于iPhone。 但是,目前我只有一个视图控制器用于那些适用于iPhone和iPad的2个xib。

在我的iPad Xib中,我有一个不属于iPhone xib的IBOutlet。 我该如何定义那个插座? 我注意到如果我把deallc方法放在里面,就像这样:

-(void) dealloc
{
    [outletOnlyForIpad release]
}

该应用程序在iPhone上崩溃。显然因为它没有在iPhone上实例化。 (我希望它会保持零,但事实并非如此)

我没有找到任何可以使用的预处理器宏,因此我可以仅为iPad声明该Outlet。 唯一的方法是检查runTime,如:

isIpad()
[outletOnlyForIpad SomeMethodOnTheOutlet]

在我的控制器的每个地方?

4 个答案:

答案 0 :(得分:0)

如果您需要单独的插座,则必须在运行时检查设备并处理插座。

如果我在不同设备上创建具有不同控件的应用程序,我倾向于以编程方式创建它们以避免此类连接问题。

答案 1 :(得分:0)

您的代码是正确的。该出口应该保持nil,因此发送release消息应该是无害的。我建议您检查此插座的位置并确定问题的原因,而不是解决错误。你确定你没有在iPhone笔尖连接任何东西吗?

答案 2 :(得分:0)

在您的dealloc中以避免iPhone崩溃,并像往常一样在iPad xib中连接IBOutlet:

-(void) dealloc
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        [outletOnlyForIpad release]
    }
}

答案 3 :(得分:-1)

初始化类时,所有实例变量都会自动初始化为零。因此,这相当于添加:

outletOnlyForIpad = nil;

使用init方法。

当为iPad加载视图而不加载iPhone时,此nil值将被覆盖(除非您有其他设置它的代码)。但是,[outletOnlyForIpad release]崩溃表明此时outletOnlyForIpad不是nil,这意味着某事已经为其提供了值。你需要找出这个东西是什么 - 它可能是你的界面构建器文件。