2011-08-05 112 views
20

我一直在尋找通過無數的帖子關於這個錯誤:

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框架已被列入BoxView.h已經在被導入。視圖控制器

的視圖控制器包含以下代碼:

-(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]; 

當我在該行改變BoxViewUIView,錯誤消失。有人知道我需要改變嗎?我已經瀏覽了很多關於此的帖子,但大多數答案都說它是鏈接相關的,但我試過滴答滴答,並且沒有成功地取消某些框。我想知道如果錯誤是在我的代碼?任何建議,將不勝感激!

回答

42

通常,當BoxView的代碼未正確編譯到目標中時會發生此問題。

identity editor screenshot

你需要確保你正在構建的目標都有其對應的複選框選中您BoxView.m實現文件。你的問題表明你已經嘗試過了,但爲了清晰起見,這裏有一個截圖(來自Xcode 4)。

'乾淨和構建'從來不會傷害,要麼。

+0

謝謝你,肯定試過乾淨的構建,但跨複選框來不是爲BoxView.m ..哪裏會發現tickbox?我正在瀏覽構建設置,但沒有看到它..我正在使用舊版本的X-Code,X-Code 3,所以我不認爲我的版本符合你發送的截圖 – cms

+0

哦其實,我只是找到了它。不知道是否在Xcode 4中,但在Xcode 3中,您可以將.m文件拖放到目標文件中。 – cms

+1

有時,當我將文件添加到項目中時,它們在項目生成時不會被編譯。在Xcode 4中,我明確地將它們添加到「構建階段」 - >「編譯源代碼」下。爲什麼這些不是默認設置(有時),我不知道。 – wcochran

1

我只想補充一點,本Mosher的答案是完全正確的。但是還有另一種方法可以將文件包含在目標設置中。

enter image description here

+1

在Xcode 7中的工作非常類似,但您可以從「常規」選項卡中爲給定選定目標訪問「鏈接框架和庫」。 – ecoe