你有两个ViewController的实现,它们具有不同目标的相同名称吗?

时间:2013-09-24 01:33:38

标签: ios interface-builder xcode5

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

我有一个有两个目标的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文件

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

  1. 首先创建一个类别来托管所有常用方法:ViewController + common和add mutual include以保持iOS目标正常运行
  2. 然后在MacOs目标目录中,创建一个ViewController_X类来实现目标变体。此类导入公共类别
  3. 由于公共类别导入原始ViewController.h,因此需要在MacOS端创建ViewController.h的存根版本。此存根文件是仅限标题的文件,如下所示:
  4. #import "ViewController_X.h" @compatibility_alias ViewController ViewController_X;

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

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