即使接口生成器是一个MyClass,我得到一个错误时启动应用程序。
当MyClass是库的一部分时,就会发生这种情况,如果直接在应用程序目标中编译该类则不会发生这种情况。
即使接口生成器是一个MyClass,我得到一个错误时启动应用程序。
当MyClass是库的一部分时,就会发生这种情况,如果直接在应用程序目标中编译该类则不会发生这种情况。
当前回答
我试过这个,还有这个网站上列出的其他答案,没有一个能帮我理清头绪。以下评论(来自http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html)有助于:
在搜索、搜索、搜索之后,我终于发现了这个被删除的类的名称隐藏在一个文件中。我必须在X-code中打开界面构建器文件,右键单击它们并选择“查看源代码”。然后我找到了 <object class="NSMutableArray" key="dict.values"> < bool关键= " EncodedWithXMLCoder " >对< / bool > <字符串> com.apple.InterfaceBuilder。IBCocoaTouchP lu gin</string> 这是类名*</string>
不幸的是,简单地删除最后一行并不能解决这个问题,它会抱怨文件中有错误的项数。您需要在它上面的行部分中删除对应的行,它引用CustomClass。
其他回答
在我的例子中,我有XCode6,指定的类.m文件最终在构建阶段的错误位置-它应该在编译源下,但最终在
我只是想添加这个答案,因为这里的大多数答案(如果不是所有答案)都假设该类实际存在。只是链接器/编译器太笨了,看不到它。因此,答案围绕要么提醒链接器类的存在或创建一个黑客'强迫'存在它。
我的问题发生时,这条消息实际上是谈论一个不存在的类..因此,一个例子将是我回到一个旧的git修订版,没有特定的类的知识。然而编译器会报错该类不存在。
解决方案吗?
用核武器摧毁整个世界!首先删除所有构建文件,删除该目录下的所有内容 ~ /图书馆/开发/ Xcode / DerivedData 从手机中删除应用程序(如果使用模拟器,则清除模拟器内容)
之后你就可以去了
尽管在运行时打印了“未知类MyClass in Interface Builder file.”错误,但这个问题与Interface Builder无关,而是与链接器有关,因为没有代码直接使用它,所以链接器没有链接类。
当.nib数据(从.xib编译)在运行时加载时,MyClass使用字符串引用,但链接器不分析代码功能,只分析代码存在,所以它不知道。由于没有其他源文件引用该类,链接器在生成可执行文件时将其优化为不存在。因此,当Apple的代码试图加载这样一个类时,它无法找到与之相关的代码,并打印警告。
默认情况下,Objective-C目标将默认设置-all_load -ObjC标志,这将保留所有的符号。但我一开始的目标是c++,没有这个。尽管如此,我还是找到了一种方法,使链接器保持侵略性。
我最初使用的黑客是添加一个空的静态例程,如:
+(void)_keepAtLinkTime;
它什么都不做,但我会调用一次,比如:
int main( int argc, char** argv )
{
[MyClass _keepAtLinkTime];
// Your code.
}
这将迫使链接器保留整个类,错误就会消失。
正如jlstrecker在评论中指出的那样,我们实际上并不需要添加_keepAtLinkTime方法。简单地调用一个现有的函数,例如:
[MyClass class];
(只要你是从NSObject派生的)。
当然,您可以在代码的任何位置调用它。我猜它甚至可能是不可访问的代码。这个想法是欺骗链接器,让它认为MyClass在某个地方被使用了,这样它就不会那么积极地优化它。
Xcode 6.3.2和Swift 1.2
快速定义视图。确保重写init(coder aDecoder: NSCoder)。视图控制器的Objective-C定义。还有,梨树上的笔尖。
将模块名称添加到Nib详细信息检查器,在其中选择类。
我终于解决了这个问题,我忘记在我的.m文件中添加以下代码:
@implementation MyTableViewCell
@end
所以这是因为我为我的表格单元格做了一个占位符@interface,它有一个连接到.xib文件中的元素,但在Interface Builder中有一个错误,如果没有为一个类指定@implementation,它就找不到它。
我已经完成了从其他论坛查看.xib作为源代码和查看MyTableViewCell的所有步骤,尽管我已经将它注释出了我的代码。我试过重置模拟器。我甚至尝试将所有的类分解为与接口同名的单独文件,但在此之前都不起作用。
附注:根据我的经验,.h/。M文件与@interface的名称不同。我有几个文件包含不止一个@interface,他们工作得很好。
P.P.S.我有一个更详细的解释,为什么UITableViewCell和UICollectionViewCell导致这个错误在https://stackoverflow.com/a/22797318/539149以及如何揭示它在编译时使用registerClass: forCellWithReuseIdentifier:。
我今天在Xcode 4下将我的aaLuminate应用程序转换为Universal时出现了这个错误。 这个应用程序基于实用工具模板,最初是在Xcode 3下构建的。
为了节省时间,我将iPhone主视图和Flipside视图复制到Universal应用程序上的适当名称。我遇到了“Interface Builder file中未知类x”错误。在我的案例中,XIB文件或目标中没有任何内容。
我还复制了aaLuminate-Info。plist文件跨越其他原因-这有一个旧的关键“主nib文件基名”设置为MainWindow。
只要我删除这个关键它修复了问题!