Xcode 6:无法将任何IBOutlet连接到ViewController

时间:2014-10-05 15:12:23

标签: ios objective-c xcode xcode6 uistoryboard

升级到Xcode 6之后,我打开了一个旧项目(包含一个子项目,因此它有很多目标) 我发现没有从我的Storyboard ViewContoller到相关对象的链接。

例如我有一个带有TableView的ViewController,现在我无法用它做任何事情,因为缺少连接,我甚至无法重新定义VC中的新IBOutlet,因为箭头来自VC的故事板不会连接到任何东西。

更清楚:

screenshot

该类在“自定义类”部分中定义,因此我无法找到问题

screenshot

我该怎么办? 顺便说一句,我使用obj-c并不是很快,我发现了一些相关的答案,但都是关于swift的。

15 个答案:

答案 0 :(得分:50)

您还可以看到父视图和自定义类之间的链接已断开(不再可见),这是一个很大的问题。

我遇到了与我实际工作的应用完全相同的问题,将XCode从5.xxx更新为6.1。对我有用的解决方法是删除每个视图控制器的引用并将它们重新添加到项目...

面对这个问题的每个人,这里都是(讨厌的)伎俩:

  • 第1步:选择.h和.m查看控制器文件
  • 第2步:删除这些文件的参考
  • 第3步:将文件重新添加到项目树
  • 第4步:打开故事板,最终重新构建项目并微笑

我能理解那些事情可能会令人讨厌,但它对我有用......希望它会帮助别人!

答案 1 :(得分:22)

在故事板层次结构中,选择View Controller,

enter image description here

在右侧窗格“自定义类”部分Class中,选择下拉菜单和所需的视图控制器。

enter image description here

答案 2 :(得分:5)

在尝试将第一个插座添加到新视图时,我在Xcode 6.1.1中遇到了类似的行为。

尝试删除引用并按照上面的建议再次添加文件但没有成功。

我找到的工作是手工编写新视图的第一个属性。我刚刚进入:

@property NSString *temp;

然后我可以正常方式连接我的插座。只需在添加第一个插座后删除临时属性即可。

希望这有帮助。

答案 3 :(得分:4)

似乎先输入插座(swift):

@IBOutlet weak var someViewOutlet: UIView!

然后从IB中将插座拖到上面代码中最右边的类型。

重新启动Xcode可以解决问题(有时)。使用Xcode 6.1

答案 4 :(得分:2)

这是我相信的正确解决方案。

如果您在代码中重命名控制器,则需要更新.xib文件。

我在界面构建器中找不到办法,所以这样做:

  1. 使用文本编辑器打开.xib文件:右键单击文件>打开>源代码

  2. <objects>节点中找到包含属性<placeholder>的{​​{1}}节点,并将placeholderIdentifier="IBFilesOwner"中的值替换为您的新控制器名称:{{1} }

  3. 所有的IBOutlets都会正常工作。

答案 5 :(得分:1)

感谢所有评论的人。

这是Xcode 6 / 6.0.1的错误。下载并安装了6.1版本,问题就消失了。

答案 6 :(得分:0)

也许尝试从故事板中的菜单中删除插座(在屏幕截图中)并再次拖动元素。

答案 7 :(得分:0)

好的,让我们检查是否缺少模块名称。

  1. 在故事板ViewController中,输入模块名称。 (项目名称)
  2. 2.Ccick在另一个领域外面。当你回到模块字段时它可能没有,但现在会有一个项目名称的下拉菜单条目。

    1. 选择您的项目名称,看看是否一切都很好。
    2. 如果仍有问题,我会发布照片。

答案 8 :(得分:0)

似乎是工作空间问题。尝试从工作区中删除项目并再次添加。它对我有帮助。

答案 9 :(得分:0)

我有这个,影响了我机器上的所有项目,迅速和客观的c并且让我疯了很久。最后还注意到我无法使用折射器重命名类。

我的修复是:

  1. 关闭xcode
  2. 删除〜/ Library / Developer / Xcode / DerivedData(这样做本身就行不通!!)
  3. 使用包含我所有项目的目录中的以下内容删除所有项目的所有用户数据,例如: / src(小心这个命令!):
  4. 找到。 -name&#39; xcuserdata&#39; -exec rm -rf {} \;

    如果您想手动完成,只需对所有项目执行以下操作即可 删除.xcodeproj / project.xcworkspace / xcuserdata 删除.xcodeproj / xcuserdata / .xcuserdatad

    1. 让Spotlight重新索引我所有项目所在的驱动器(不确定是否需要)
    2. 重启机器
    3. 一切都重新焕发生机!

答案 10 :(得分:0)

我遇到了同样的问题。

事实证明我重命名了我的视图控制器类和文件名。在故事板中,我在右侧窗格中有陈旧值,自定义类 - &gt;类。所以IBOutlets没有对齐,因为缺少的类中没有,这是它期望找到定义的出口。

在右侧窗格的“自定义类”字段中填写视图控制器的正确类名,解决了我的问题。

如果您在自定义类字段中有一个错误的类名,则XCode需要更详细。

答案 11 :(得分:0)

没有人解决我的同样问题... 但我已经解决了:

  • 关闭xcode
  • 重命名项目文件夹
  • 打开xcode

然后出口将再次回来

我希望这个解决方案对于遇到同样问题的人来说是正确的

答案 12 :(得分:0)

在Xcode 6.3中我需要关闭Xcode并重启Mac。单独重新启动Xcode并不适合我。

我已经有6.3很长一段时间了,我的问题是我正在创建的新项目来测试一些东西。这次绝对不是升级问题。

答案 13 :(得分:0)

我有Xcode 6.3并且看到了类似的问题。最后,.h文件中的一些编辑解决了我的问题。如果您的界面将IBOutlet定义为

@interface NavigationViewController :UIViewController
{
  IBOutlet UILabel *lblName;
}

将此更改为.m文件并添加@synthesize lblName;

@interface NavigationViewController :UIViewController
{
   __weak  UILabel *lblName;
}

@property (nonatomic, weak) IBOutlet UILabel *lblName;

答案 14 :(得分:0)

我遇到了同样的问题,没有可供链接的视口。我能够解决它的唯一方法是将XIB文件的所有者类更改为“UIViewController”,创建链接,然后将其更改回我想要的自定义视图控制器类。链接停留,一切都很好。