找不到名为ViewController的类的任何信息。

170

自从我开始使用Xcode(4.6.3)以来,这个bug就一直困扰着我。每当我尝试将Storyboard中的项目链接到我的代码时,就会出现以下错误:

无法找到名为ViewController的类的任何信息。

这也会影响到自定义类。我试过以下方法:

  • 删除委托数据。
  • 删除并重新添加类。
  • 重启Xcode。
  • 重新安装Xcode。

无论是任何类,在我的所有项目中都无法使用ctrl-drag创建连接。即使是全新的模板应用程序也会出现相同的问题。如果我手动输入代码然后使用ctrl-drag,我可以创建一个工作连接,但我无法自动添加它。迄今为止,我在互联网上找到的任何方法都没有帮助。有什么建议吗?


你确定 ViewController .m 文件已经被正确地包含在目标中了吗?(在右侧检查器面板中的复选框) - Alfie Hanssen
2
你的storyboard中有一个视图控制器,并指定了“ViewController”作为应该实例化以管理视图的类的名称。检查storyboard中的每个视图控制器:选择视图控制器,查看右侧窗格上的“identity inspector”,并查看“Custom Class”属性。如果它读取“ViewController”,那么这就是问题所在。输入应该管理你的视图控制器的类的名称...或者输入UIViewController以获取默认的UIKit实现。 - Nicholas Hart
1
我在“Identity Inspector”中将自定义类更改为“UIViewController”,然后无法再从Storyboard拖动到ViewController.h。如果我创建一个新类并尝试将其ctrl-drag到其中(在相应地设置视图控制器的类之后),我会得到相同的“找不到任何信息”的错误提示。 - user2597451
4
我也遇到过这个问题,对自动生成的ViewController类进行修改后解决了。例如,在viewDidLoad:方法中添加一个NSLog()即可。 - j b
1
可能是重复的问题:无法插入新的出口连接:找不到所命名类的任何信息 - Andrew_STOP_RU_WAR_IN_UA
在我的情况下,我创建了一个名为“aaa”的视图控制器,删除了引用但没有删除。我本意是要删除并删除引用。所以我去文件系统中删除了该文件。然后我重新创建了一个同名的新视图控制器。我确实想知道是否会有一些我不知道的剩余问题,因为我对Swift还很陌生。最终,我进行了Build->Clean,然后重新启动了XCode(“打开myproject.xcworkspace”)。然后我就能够无误地拖动插座了。 - Lucy
41个回答

0

从Finder Xcode中检查是否已关闭。

强制退出Xcode并重新启动。

产品 > 清理


0

我知道在大多数情况下这只是Xcode的问题,但在我的情况下,建议的所有操作都无法解决问题,我相信这是我在尝试重命名项目时犯的错误,所以最终我创建了一个新项目并将所有内容导入其中。

最终这解决了问题。


0
在我的情况下,我有一个相同的类名,xcode 无法识别我要定位哪一个,因此在选择类名时要小心。

0

我建议重新制作相关的 .m 和 .h 文件,并给它们一个原创的名称,不要使用像 "ViewController" 这样的通用名称。尝试使用更符合你想要该文件执行的操作的名称,并以 View Controller 结尾(例如 "PizzaDecoraterViewController")。

然后选择你想要连接到这些文件的 ViewController。确保你选择的是 ViewController,而不仅仅是其中的一个对象。点击底部的黑色条(带有 "First Responder" 和 "Exit" 图标)。整个 ViewController 应该会被蓝色轮廓线框起来。然后进入 Identity Inspector 中的 Custom Class 部分,你应该会看到第一个字段中灰色的 "UIViewController"。在该字段中,输入你想要连接的 .h 或 .m 文件的名称(开始输入 "PizzaDecorator...",它应该会自动完成)。然后按 ENTER 键。

当你打开 Assistant Editor 时,请确保你要拖放到的文件确实是正确的文件。

如果你已经按照上述步骤进行了所有操作,那么它应该可以正常工作。


很遗憾,还是不起作用。我之前尝试过这个方法,但都没有成功。这是一张截图:http://i.imgur.com/5ixtcps.png - user2597451
哦,奇怪。尝试以编程方式添加它们(即@property(nonatomic,strong)IBOutlet UIView *test;),然后当旁边出现小圆圈时,将其拖放到您的UIView中。 - CaptJak
那个方法一直都有效(应用程序似乎也能正常运行),但我正在尝试解决它无法自动添加的问题。 - user2597451
如果它能这样工作,那么它应该也能以另一种方式工作。你的XCode有bug?尝试获取先前的版本(如4.6.2或其他版本)并安装。否则,嗯......是的...... - CaptJak
刚刚在Xcode 5中也发生了同样的事情。以前从未遇到过这种情况。尝试将IBOutlet拖入viewController头文件中,但出现了那个消息。重新启动Xcode后问题得到解决。为什么会这样,我不知道。 - Alex Zavatone
显示剩余2条评论

0
正如我在@ChrisHarrison的回答中所评论的那样,这些方法对我并没有起作用,但是像这样删除派生数据,就像https://dev59.com/wGUp5IYBdhLWcg3wbXFf#16182672中所述,我通过这种方式使它工作了。

删除派生数据或清理重建项目或关闭Xcode对我没有用。 我刚刚创建了一个新的视图控制器类,然后复制粘贴了旧的代码,但没有包括类名。这样它就开始工作了。 - Burcu Kutluay

0

对我而言,我特别指定的视图在接口构建器中无法编译。它被标记为@IBDesignable

移除@IBDesignable,然后添加我的输出口,再标记为@IBDesignable解决了我的问题。


0
在我的情况下,是因为 Xcode 索引进程停止运行了。重新启动我的 Mac 解决了这个问题。

0

我在应用MVC架构后遇到了这个问题,当我改变info.plist文件的位置后。

在指定新的文件位置后,问题得到解决。


0

Xcode Storyboard错误

无法插入新的outlet连接:找不到名为<controller_name>的类的任何信息

当您重命名Main.storyboard(例如为Foo.storyboard)并尝试将storyboard与控制器连接时,也会出现此错误。

要修复它,只需在Info.plist中设置正确的名称UISceneStoryboardFile字符串(在我们的情况下是Foo)


0

在我的情况下,奏效的方法(有点奇怪,但是行得通)是:

尝试添加数据源(例如 ViewController 的扩展,比如 UITableViewDataSource)。Xcode 将尝试重新加载 ViewController。然后我编写了一些协议方法(起初 Xcode 没有自动补全这些方法,但手动输入也可以),接着我添加了 IBOutlets,最后移除了数据源。

示例:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

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