0

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

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

视图控制器有一个 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's”.m 文件,而不是“B's”.m 文件。

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

我向“B's”xib 添加了一个控件,并在助手编辑器中显示了“B's”.h 文件,然后我将一个按钮拖到它上面以创建一个 IBOutlet,并将其放入“A's”.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 文件。

4

2 回答 2

1

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

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

于 2013-09-24T02:58:22.560 回答
0

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

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

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

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

现在在 MacOS 故事板中,使用 ViewController_X 类并且只看到相关的 IBOutlets。

此外,包括 ViewController.h 在内的任何通用文件都将看到其目标的适当类。

于 2017-07-01T20:45:43.220 回答