在 iOS 开发中,您可以拥有两个版本的 .nib 文件并使用各自的方案编译每个版本吗?
Posted
技术标签:
【中文标题】在 iOS 开发中,您可以拥有两个版本的 .nib 文件并使用各自的方案编译每个版本吗?【英文标题】:In iOS dev, can you have two versions of a .nib file and compile each with its respective scheme? 【发布时间】:2012-01-21 04:33:11 【问题描述】:我有一个完整版应用程序的 nib 文件。该视图中的按钮连接到视图控制器中的功能。我有两个方案(完整版和精简版)。每个人共享许多文件,但有自己的图形文件等。我还有#ifdef 指令来包含应用程序的精简版代码。
我想为 lite 版本创建另一个版本的 nib 文件,因为视图会略有不同...颜色更改、添加的信息按钮、附加文本等。这两个 nib 文件还将共享一个很多相同的按钮等应该连接到视图控制器中的某些功能。
我可以创建两个 nib 版本并选择在我的应用程序的适当版本中包含适当的 nib 吗?注:我想使用一个带有两个方案的 Xcode 项目来处理这个问题。我不想维护两个单独的项目。
【问题讨论】:
【参考方案1】:是的,您绝对可以这样做,只需创建两个 xib 文件并将 xib 的文件所有者指定给您的视图控制器,现在您可以使用 initWithNibName:
来初始化您的特定 xib。
NSString *DemoViewController_xib = @"DemoViewController_FullVersion";
if (IS_Lite_Version)
DemoViewController_xib = @"DemoViewController_LiteVersion";
DemoViewController *dvc = [[DemoViewController alloc] initWithNibName:DemoViewController_xib bundle:nil];
[self.navigationController pushViewController:dvc animated:YES];
【讨论】:
【参考方案2】:Saurabh 是正确的,但最好尽可能使用预编译器。因此,在您的 lite 版本中,将 -DLITE_VERSION=1 添加到您的编译器选项中,然后添加:
#ifdef LITE_VERSION
NSString *DemoViewController_xib = @"DemoViewController_LiteVersion";
#else
NSString *DemoViewController_xib = @"DemoViewController_FullVersion";
#endif
好处是#ifdef 语句是在编译时评估的,因此在运行时不需要额外的指令。
我实际上有 7 个不同的应用程序,它们都是具有不同目标的同一个 XCode 项目。这样,当我改进一个应用程序的代码时,所有其他应用程序也会自动改进。
【讨论】:
以上是关于在 iOS 开发中,您可以拥有两个版本的 .nib 文件并使用各自的方案编译每个版本吗?的主要内容,如果未能解决你的问题,请参考以下文章