无法插入新的出口连接:找不到名为该类的任何信息。

281

我在Xcode上遇到了一个错误,提示没有有关视图控制器的信息。

无法插入新的出口连接:找不到名为的类的任何信息

为什么会出现这种情况?

截屏1


2
我认为这个问题以前已经被问过了:https://dev59.com/OmMm5IYBdhLWcg3wRdbe - Tapani
我只是退出了 Xcode,然后重新打开它。编译器会重新加载所有文件,它可以检测到你正在寻找的文件。 - Tran To
请检查一下你的视图控制器文件中是否已经存在一个未连接的插座。我发现我确实有这个问题。在我删除它之后,就没有出现任何问题了。 - Kex
解决此问题的最佳方法是创建一个名为UITableViewCell类型的新“tableviewcell”类,并将表格视图单元格的类指定为此tableviewcell,然后清理您的项目。这样做之后,您就不会再遇到此错误了。 - Amit Verma
这是我的操作步骤: 关闭故事板的选项卡窗口,然后用新的选项卡重新打开它。 - Stone
显示剩余8条评论
19个回答

777

以下是一些可解决此问题的方法(按照难度递增的顺序):

  • 清理项目(Product > Clean
  • 手动复制并粘贴

    @IBOutlet weak var viewName: UIView!
    // or
    @IBAction func viewTapped(_ sender: Any) { }
    

    同时按住控制键并拖动它。(根据需要更改类型。) 还可以查看此处

  • 完全关闭Xcode并重新启动您的项目。

  • 删除Derived Data文件夹(前往 Xcode > 偏好设置 > 位置,单击Derived Data文件夹旁边的灰色箭头,然后删除您的项目文件夹。)
  • 在类上点击删除,删除引用(不是移动到垃圾箱),然后再次添加。(请参见这个答案)

不要忘记在视图控制器上删除类,以便这些步骤能够正常工作。 - reggie
9
在 Xcode 8.3.2 中,这些步骤都没用。我必须点击“显示身份检查器” > 清空“类”字段(选中自定义类的名称并删除)> 再次在“类”字段中输入类名。Xcode 会自动完成类名,并且我按下回车键。 - PeqNP
将以下行添加到您的~/.bashrc文件中:alias purgederiveddata='rm -rf ~/Library/Developer/Xcode/DerivedData/*',以便使用命令purgederiveddata一次性清除。 - eskimwier
我强烈建议大家尝试一下我的解决方案。如果人们不得不频繁重新启动计算机来修复错误,那会感到非常失望。 - Stephen Paul
删除派生数据对我有用(转到Xcode>首选项>位置) - pallavi
显示剩余4条评论

137
如果以上方法都不起作用,可以先在文件中输入输出口的名称,例如:@IBOutlet weak var headerHeightConstraint: NSLayoutConstraint! 然后从nib中的输出口拖动到你刚刚程序化创建的变量上。这样做不需要清理、构建或删除任何内容就可以运行。

5
通常情况下,与其花费很长时间来清理、构建等,更快的解决方案是更好的选择。谢谢。 - mohonish
1
非常好,一旦你这样做了,自动程序就会出现,谢谢。 - AmJa
1
首先将您的XIB对象连接到IBOutlets,然后尝试连接它们的约束IBOutlets。如果没有这样做,它将始终显示错误。 - Chandramani
在尝试插入新的插座时,插入位置也可能会产生影响。例如,在列表顶部(上方有足够空间)插入可以成功,但在列表中间则不行。 - Richard
1
这应该被标记为最佳答案。它更容易、更快速、更可靠。而且它一直都有效!干得好,感谢 @StephenPaul。 - denis_lor
显示剩余2条评论

61

只需按照以下两个步骤,即可消除此错误:

  1. 使用“Product > clean”清理项目
  2. 运行该项目

现在尝试添加操作或出口。就是这样。

编码愉快!


5
奇怪...这两个简单步骤也帮助我解决了问题。所以我建议首先尝试这些简单的步骤 :-) - crosscode

50

最佳答案中的所有提示对我都没用。我快疯了。然后注意到助理编辑器不知何故被设置为手动,而我正在使用ViewController.swift(接口),而不是 ViewController.swift 文件。

改变一下这个设置,问题就解决了。有点尴尬,但嘿,我们都在学习。

enter image description here


1
救命稻草的答案!其他答案都没有解决问题。很遗憾错误描述没有给出任何提示,让你知道你可能在错误的文件中。谢谢。+1 因为图片让一切都清晰明了。 - Pauloco
我注意到了一些相似但不同的事情:在顶部路径中显示类名时,只有类名,而缺少路径开头,如myProject>appName>controller,然后是类名。我选择了另一个类,然后回到有问题的类,一切都正常了。 - claude31

21

以下是我解决此问题的步骤:

  1. 从视图(Storyboard / xib)中删除类名引用并保存;
  2. 再次添加类名并保存;
  3. 清理并构建;

完成!


这是对我有效的方法。其他答案都没有起作用。 - Tahdiul Haq

11

我也遇到了同样的问题。我尝试了以下解决方案,但都没有用:

  1. Clean Project (cmd + shift + k) 以及 Clean Project Build (cmd + shift + alt + k)
  2. 删除派生数据模块缓存内容

以下是解决此问题的方法:

  1. 转到源代码文件中并手动编写IBOutlet / IBAction(建议复制粘贴)

Screenshot 1

  1. 然后进入Storyboard文件,并打开Utilites窗口
  2. 进入Connection Inspector
  3. 然后将在源文件中编写的IBOutletIBAction与Interface Builder连接起来。

Screenshot 2


拖动Outlets/Actions根本不起作用,但是在我手动这样做之后,一切都正常工作了。 - Jason
这是一种标准的备选方法来建立连接。在单选按钮操作的情况下,据我所知,这是唯一的方法。在Storyboard中,您也可以右键单击控制器,找到功能并建立连接。 - curt

8

我也遇到了同样的问题。后来我意识到在尝试通过控制拖动创建输出口时,X-Code中选择了手动选项。

enter image description here

我将其设置为自动后它就可以工作了

enter image description here


我也遇到了这个问题,甚至没有注意到差异。 - Joshua Dance
太好了!我为这个清除错误的项目浪费了很多时间,重启xCode,删除派生数据,但那是唯一对我有效的解决方案!非常感谢! - Anton Eregin

7
  1. 关闭你正在工作的项目。
  2. 删除你的项目的【DerivedData】文件夹。(这个文件夹可能在你的项目文件夹内部,或者在
    ~/Library/Developer/Xcode/DerivedData/
    (你的项目)/)或者其他你设置过的地方。
  3. 重新启动你的项目。

7

我通过编程创建标签和文本字段,然后从代码左侧的小空圆圈向Storyboard上的组件进行命令拖动来解决了这个问题。为了说明我的观点:我写了@IBOutlet weak var HelloLabel: UILabel!,然后按住Command键并将代码拖到Storyboard上的组件中。


这个解决方案对我来说非常完美!除了 @IBOutlet weak var myButton: UIButton 之外,我使用相同的过程设置了 @IBAction func doSomething(_ sender: Any) { },然后将此函数连接到我的故事板上的 _UIButton_。感谢 @KuboAndTwoStrings 分享。 - Nii Mantse

4
请仅执行以下两个步骤以消除此错误。
1.  Clean Project using Product -> clean.
2.  Run the Project.

现在尝试添加/连接操作或输出。

对我来说已经很多次运作良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,