私はこのエラーに関する無数の投稿を調べてきました:
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
BoxView
はUIView
のサブクラスであり、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];
その行でBoxView
をUIView
に変更すると、エラーはなくなります。私がここで変更する必要があることを誰かが知っていますか?私はこれについて多くの投稿を調べてきましたが、ほとんどの回答はリンク関連であると述べていますが、特定のボックスにチェックを入れたり外したりしようとしましたが、成功しませんでした。エラーが私のコードにあるかどうか疑問に思っていますか?任意の提案をいただければ幸いです!
一般に、これはBoxView
のコードがターゲットに正しくコンパイルされていない場合に発生します。
ビルドしているターゲットの対応するボックスにBoxView.m
実装ファイルがチェックされていることを確認する必要があります。あなたの質問はあなたがこれを試したことを示唆していますが、明確にするためにここにスクリーンショット(Xcode 4から)があります。
「クリーンアンドビルド」も決して害はありません。
ベン・モシャーの答えが完全に正しいことを付け加えたいだけです。しかし、ビルドするファイルをターゲット設定に含める別の方法があります。
追加されたシナリオ
プロジェクトにモジュールの依存関係(フレームワーク)がある場合は、メインプロジェクトをビルドする前にそれらを再ビルドします。