没有可见的@interface

32
我曾多次遇到这个错误,但普遍不清楚是什么原因导致的。在 Stack Overflow 和谷歌上搜寻了一个多小时后,我仍然没有找到答案。能有人帮忙吗?
我看到了几个具体的答案,但都没有解释为什么会出错,只是让我“做 X”或者“做 Y”。
我还没有贴代码,因为我想知道这个错误一般是由什么原因引起的,这样我在未来遇到此类错误时就能修复我的代码。

你没有包含代码!?你遇到了什么错误?你希望如何解决这个问题?我怀疑在这里的 SO 上有很多通灵的人。 - ant
6
我收到的错误是“没有可见的@interface...”。我已将其包含在标题中,但可能也应该在描述中加入。 - Shawn Sharp
7个回答

11

有很多原因可能会导致这种情况发生,但通常它指的是在代码行中标记的位置,它没有看到你引用的选择器在对象类型的接口中的任何证据。

在这个例子中,

无可见接口错误

他们使用了错误的类型声明operandStack。

在这个例子中

http://www.raywenderlich.com/forums/viewtopic.php?f=2&t=3312

他们在选择器名称中有一个拼写错误。

谢谢您的简单回答,我是新手。如何向界面添加选择器? - Shawn Sharp
1
在这个上下文中,它只是消息/方法的另一个名称。 - Lou Franco
基本的Objective-C可以在这里找到:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Introduction/introObjectiveC.html#//apple_ref/doc/uid/TP30001163-CH1-SW2 - Lou Franco
在我的情况下,我有一个拼写错误的选择器,如下所示:destructveButtonTitle:@"Yup." - changokun

2

另一个可能的原因是在使用库中的类别时,您没有在其他链接器标志中设置 -ObjC(或-all_load)。


怎么设置这个? - ScottyBlades

2

你是否在使用Xcode 4.2(或更早版本)运行在Xcode 4.3上编写的代码?在4.3+ Xcode中不需要声明私有方法,它假设实现文件中编写的方法(没有在接口中声明)是私有的。但是在Xcode <= 4.2中,这将会导致错误,这些方法至少需要被声明为私有的。


2
编译器在 Xcode 4.2 之前的版本中,只要在使用方法之前在文件中定义了该方法,即使该方法未声明也不会出错。 - jscs

2
我遇到了这个问题;我的问题是把方法设置为类方法而不是实例方法导致的。非常愚蠢。

1

另一个常见的错误是忘记写 [someInstance setSomeValue:3]; 而不是 [someInstance someValue:3] (<- 错误的代码)。这就是我所犯的错误。


0
当我遇到这个问题时,结果发现Xcode在更改Git分支后没有重新索引文件。解决方案是删除派生数据
使用Xcode版本10.0 文件->工作区设置...(或项目设置...)->单击小绿圆圈并手动删除DerivedData文件夹中的所有文件

enter image description here


0

我遇到了一个关于NSSavePanel -beginSheetModalForWindow::的问题,这个方法显然是存在的。我尝试进行了全新的构建以及删除了DerivedData,但是没有运气。我曾经尝试复制黏贴后再修改,但是我已经将其注释并手动输入了调用-beginSheetModalForWindow的方法,这样它就开始正常运行了。据我所知,我原始调用中没有任何错误。


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