(这是一个非常大的项目的简化描述)
我有一个有两个目标的XCode项目。两个目标之间的唯一区别是每个目标都有一个不同的viewcontroller实现。
视图控制器有一个xib,只是一个内部有UITextView的简单视图。我们称之为TextReportViewController。
实现“A”具有打印功能,因此它有一个按钮,允许您打印UITextView的内容。它位于一个名为“A”的组中。
实施“B”有电子邮件,因此它有一个按钮,允许您通过电子邮件发送UITextView的内容。它位于一个名为“B”的组中。
目标“A”在其“编译源”中包含来自组“A”的.m文件和“复制捆绑资源”从组“A”中获取xib。
目标“B”在其“编译源”中包含来自组“B”的.m文件和“复制捆绑资源”从组“B”获取xib。
我在“A”之后添加了“B”,也就是说,在我决定之前我想要另一个目标用“A”时。
当我编辑“B”xib文件并检查“文件所有者”时,在身份检查器中,我单击自定义类类型的箭头,它转到“A”“.m文件,而不是”B“.m文件。
当我查看文件所有者的出口时,它是“A”和“B”出口的组合。
我向“B”的xib添加了一个控件,在助理编辑器中我显示了“B”的.h文件,然后我拖了一个按钮来创建一个IBOutlet并将它放在“A”的.h文件中
我需要做些什么来确保目标A使用A的.h文件和xib文件,目标B使用B的.h文件和xib文件。
请注意,当我添加目标“B”时,它会创建一个名为“B”的文件夹。所以文件的位置如下:
根:
TextReport:
TextReportViewController.m
TextReportViewController.h
TextReportViewController.xib
B:
TextReport:
TextReportViewController.m
TextReportViewController.h
TextReportViewController.xib
当我编辑“B”xib文件并显示助理编辑器并选择“自动”以显示.h和.m文件时,它会显示四个,两个.h文件和两个.m文件
答案 0 :(得分:0)
我怀疑你不能有这种设置。即使您的每个目标都使用VC的不同副本,您也必须在Xcode项目中同时拥有同名文件的副本。这就是混乱开始的时候。在IB中指定xib的所有者时,提供类的名称,但不提供定义它的文件的路径。所以你无法真正知道正在使用哪两个文件。
我建议为不同的目标使用不同的名称。
答案 1 :(得分:0)
这是一个迟到的答案,将其作为记录发布。 我遇到了同样的情况并寻找解决方案。由于我没有办法告诉Xcode Interface Builder忽略其他目标文件,我设置了这个解决方法:
假设在iOS目标中,有一个ViewController类,并希望在使用其原始实现的一部分时为MacOS目标故事板制作MacOS版本。
#import "ViewController_X.h"
@compatibility_alias ViewController ViewController_X;
现在在MacOS故事板中,使用ViewController_X classe,只看到相关的IBOutlets。
此外,包括ViewController.h在内的任何常见文件都会看到适合其目标的类。