未定义符号:"_OBJC_CLASS_$ error"

30

我已经阅读了无数关于这个错误的帖子:

Undefined symbols:
"_OBJC_CLASS_$_BoxView", referenced from:
  objc-class-ref-to-BoxView in ViewMovingViewController.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

BoxViewUIView 的子类,并且已经包含了 UIKit 框架。在 ViewController 中已经导入了 BoxView.h

ViewController 包含以下代码:

-(void) addBoxViewAtLocation:(CGPoint)point {
    CGRect rect;  
    rect.origin.x = point.x;  
    rect.origin.y = point.y;  
    rect.size.width = 80;  
    rect.size.width = 40;  
    BoxView *newView = [[BoxView alloc] initWithFrame:rect];  
    newView.backgroundColor = [UIColor yellowColor];  
    [mainView addSubview:newView];  
}  

BoxView 包含以下代码:

- (id)initWithFrame:(CGRect)frame {     
    self = [super initWithFrame:frame];  
    if (self) {  
        // no further initialization  
    }  
    return self; 
}  

这是引发错误的那一行代码,来自上面的代码:

BoxView *newView = [[BoxView alloc] initWithFrame:rect];

当我把那行中的 BoxView 改成 UIView,错误就消失了。有人知道我需要在这里改变什么吗?我查看了许多关于此问题的帖子,但大多数答案都说与链接相关,但我尝试了勾选和取消勾选某些框,但没有成功。我想知道错误是否在我的代码中?任何建议都将不胜感激!

4个回答

54

一般来说,当BoxView的代码没有正确编译进你的目标中时,会出现这种情况。

identity editor screenshot

你需要确保正在构建的目标已经选中了对应的BoxView.m实现文件。你的问题暗示你已经尝试过了,但是为了更清晰起见,这里提供一张Xcode 4的截图。

执行'清理和构建'也不失为一个好方法。


谢谢,我肯定尝试了清理构建,但是没有找到BoxView.m的复选框.. 我应该在哪里找到它?我正在查看构建设置,但没有看到它.. 我正在使用较旧版本的X-Code,即X-Code 3,因此我认为我的版本不符合您发送的屏幕截图。 - cms
1
有时候我将文件添加到项目中,但在构建项目时它们并没有被编译。在Xcode 4中,我需要显式地将它们添加到“Build Phases” -> “Compile Sources”下。为什么它们有时不会默认设置,我不知道。 - wcochran
@cms 如果这个解决了(或者对你有所帮助),那么如果您能接受这个答案就太好了。 :-) - Ben Mosher
非常感谢!我不想声称我现在完全理解这个问题的所有细节,但是嘿,我可以编译我的应用程序了! - Sjakelien
你救了我的一天!!谢谢。 - e.ozmen
显示剩余3条评论

4
我想补充一下Ben Mosher的答案是完全正确的。但是在目标设置中还有另一种将文件包含到构建中的方法。 输入图像描述

1
在Xcode 7中,它的工作方式非常相似,但您可以从所选目标的“通用”选项卡中访问“链接的框架和库”。 - ecoe

1

新增场景

如果您的项目有模块依赖(框架),请在构建主项目之前重新构建它们。


0

我曾经遇到过类似的问题。

在我的情况下,这是由LFS引起的问题。

  1. 打开终端应用程序。

  2. 安装Git-LFS。

    brew install git-lfs

  3. 在LFS安装完成后输入此命令进行初始化。

    git-lfs install

4-1.(如果您使用CocoaPods)移动到项目文件夹,并重新安装Pods(删除 -> 安装)。

4-2.(如果您不使用CocoaPods)删除克隆,并重新下载。


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