你可以有两个不同的目标同名的ViewController的实现?

(这是一个非常大的项目的简单描述)

我有一个有两个目标的XCode项目。 两个目标之间的唯一区别是每个目标都有一个不同的视图控制器实现。

视图控制器有一个xib,只是一个简单的视图,里面有一个UITextView。 我们称之为TextReportViewController。

实现“A”有打印,所以它有一个button,允许您打印UITextView的内容。 这是在一个名为“A”的组。

实现“B”有电子邮件,所以它有一个button,允许您通过电子邮件发送UITextView的内容。 它在一个叫“B”的小组里。

目标“A”在其“编译源”中包括来自组“A”的.m文件,并且“复制软件包资源”从组“A”获取xib。

目标“B”在其“编译源”中包括来自组“B”的.m文件,并且“复制软件包资源”从组“B”获取xib。

我在“A”之后加了“B”,也就是说,在我决定让另一个目标与“A”一起工作之前。

当我编辑“B”xib文件,并检查“文件的所有者”,并在身份检查员,我点击自定义类types的箭头去“A的”.m文件,而不是“B的”.m文件。

当我看着文件所有者的出口时,它是“A”和“B”的出口的组合。

我向“B's”xib添加了一个控件,并在助理编辑器中显示了“B's”.h文件,然后拖动一个button创build一个IBOutlet,并将其放入“A's”.h文件中。

我需要做些什么来确保目标A使用的是.h文件和xib文件,目标B是使用B的.h文件和xib文件。

请注意,当我添加目标“B”时,它创build了一个名为“B”的文件夹。 所以这些文件就像这样:

根:

TextReport: TextReportViewController.m TextReportViewController.h TextReportViewController.xib B: TextReport: TextReportViewController.m TextReportViewController.h TextReportViewController.xib 

另外,当我编辑“B”xib文件,并显示助手编辑器并select“自动”显示.h和.m文件时,它显示四个,两个.h文件和两个.m文件。

我怀疑你不能有这样的设置。 即使您的每个目标使用您的VC的不同副本,但您必须在Xcode项目中拥有同名文件的两个副本。 这是混乱开始的时候。 当您在IB中指定xib的所有者时,您提供类的名称,但不提供定义文件的path。 所以你不能真正知道这两个文件中的哪一个被使用。

我build议为不同的目标使用不同的名称。

这是一个迟到的答案,张贴它的logging。 我遇到了同样的情况,并寻找解决办法。 由于我没有办法告诉Xcode Interface Builder忽略其他目标文件,所以我设置了这个解决方法:

说在一个iOS目标中,有一个类ViewController,并希望为MacOS目标故事板制作一个MacOS版本,同时使用其原始实现的一部分。

  1. 首先做一个类别来托pipe所有常用的方法:ViewController +通用并添加相互包含来保持iOS目标的运行
  2. 然后在MacOs目标目录中,创build一个ViewController_X类来实现目标变体。 这个类导入了通用类
  3. 由于常见的类别导入了原始的ViewController.h,因此需要在MacOS端创buildViewController.h的存根版本。 这个存根文件是一个只有头文件,像这样:

#import "ViewController_X.h" @compatibility_alias ViewController ViewController_X;

现在在MacOS故事板上,使用ViewController_X类,只能看到相关的IBOutlets。

此外,包括ViewController.h在内的任何常见文件都会为其目标查看适当的类。