ipad预编译器

Posted

技术标签:

【中文标题】ipad预编译器【英文标题】:precompiler for ipad 【发布时间】:2010-09-16 21:25:42 【问题描述】:

大家好,

在 xcode 中,我尝试加载不同的 nib 文件,以防我使用 iphone/ipod 或 ipad。

我有一个包含所有枚举和常量的 Define.h 文件,所以我想在其中放入一种(显然错误,因为我不知道该怎么做):

#if IPHONE  // <-- can I intercept the Active Executable here ?
  #define MY_VIEW @"TableViewIphone.xib"
#else
  #define MY_VIEW @"TableViewIpod.xib"
#endif 

然后在我的视图控制器中包含 Define.h

[[NSBundle mainBundle] loadNibNamed:MY_VIEW owner:self options:nil];

我需要使用设备模拟器执行此操作,有没有办法拦截 xcode 中“Active Executable”中的内容并拥有一组专门的定义?还有其他更简单的选择吗?

谢谢

【问题讨论】:

【参考方案1】:

您要做的是在运行时选择适合设备的 xib。

你正在做的是一个编译时选择,它将设置xib用于所有设备,这不是你想要的。

我假设您正在构建一个通用应用程序,是吗?

我更喜欢在我的应用程序启动时使用应用程序的 Info.plist 文件中的正确密钥(即密钥 NSMainNibFile~ipad)让设备加载适当的 xib。 (例如,我将NSMainNibFile~ipad 设置为MainWindow-iPad...注意:没有“.xib”位)

另一种选择是使用UI_USER_INTERFACE_IDIOM 宏:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

    // Load iPad xib

else

    // Load iPhone xib

【讨论】:

谢谢,不知道是不是通用的,但目标只是在不改变后面的模型的情况下为 ipad 显示不同的内容。我认为在编译时这样做会更好。否则我将不得不在代码中添加很多“if”语句,或者可能有替代方法。您也可以更详细地了解第一个案例吗?我还是个新手 :-) 对于第一种情况,您根本不需要任何“if”语句。我的“MainWindow-iPad.xib”为应用程序委托(AppDelegate-iPad)设置了一个特定于 iPad 的类,并包含一个特定于 iPad 的视图控制器(UISplitViewController)。我只是在我的Info.plist 中设置了NSMainNibFile~ipad 键,然后我就走了。 :) 是的,第一个笔尖没问题,我只是按照你的建议做了。但是,如果一个应用程序有多个 xib,因此有多个控制器,除了为新的 ipad.xib 编写一个新的特定控制器或在现有的控制器中使用“if else”语句之外,我别无他法。

以上是关于ipad预编译器的主要内容,如果未能解决你的问题,请参考以下文章

编译要排除的 MySQL 行列表时:预编译还是不预编译?

取消选中“允许预编译站点可更新”时无法使用“发布期间预编译”网站

JavaScript的预编译过程

JavaScript的预编译过程

JavaScript的预编译过程

vs2008添加预编译命令