web-dev-qa-db-ja.com

未定義のシンボル:「_OBJC_CLASS_ $エラー

私はこのエラーに関する無数の投稿を調べてきました:

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がViewControllerにインポートされました。

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

その行でBoxViewUIViewに変更すると、エラーはなくなります。私がここで変更する必要があることを誰かが知っていますか?私はこれについて多くの投稿を調べてきましたが、ほとんどの回答はリンク関連であると述べていますが、特定のボックスにチェックを入れたり外したりしようとしましたが、成功しませんでした。エラーが私のコードにあるかどうか疑問に思っていますか?任意の提案をいただければ幸いです!

26
cms

一般に、これはBoxViewのコードがターゲットに正しくコンパイルされていない場合に発生します。

identity editor screenshot

ビルドしているターゲットの対応するボックスにBoxView.m実装ファイルがチェックされていることを確認する必要があります。あなたの質問はあなたがこれを試したことを示唆していますが、明確にするためにここにスクリーンショット(Xcode 4から)があります。

「クリーンアンドビルド」も決して害はありません。

43
Ben Mosher

ベン・モシャーの答えが完全に正しいことを付け加えたいだけです。しかし、ビルドするファイルをターゲット設定に含める別の方法があります。

enter image description here

1
Enrico Susatyo

追加されたシナリオ

プロジェクトにモジュールの依存関係(フレームワーク)がある場合は、メインプロジェクトをビルドする前にそれらを再ビルドします。

0
microVinchi