2

プロジェクトにフレームワークを追加しようとしています。Build Phases -> Link Binary With Libraries -> "+ button" で追加します。それらが追加されると赤く表示され、コードをコンパイルしようとすると次のようになります。

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_ASIHTTPRequest", referenced from:
objc-class-ref in LoginViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

しばらくすると、[ビルド フェーズ] タブでフレームワークが黒いテキストに戻りますが、コードはまだコンパイルされません。ファイルはすべてフォルダー内に無傷であり、場所は他のすべての作業フレームワークと同様に「SDK に相対的」です。問題のフレームワークもプロジェクトフォルダーに保存されていたときに、以前にこの問題が発生しましたが、今回はそうではありません。このトピックに関する他の多くのスレッドを読みましたが、それらは以前のバージョンの XCode に関するものであるようです。助けていただければ幸いです。

編集: MobileCoreServices および CFNetwork フレームワークを追加しようとしています。LoginViewController は私のプロジェクトの一部です。

編集:フレームワークが含まれているかどうかに関係なく、同じエラーが発生します。これは、フレームワークを含めた後、何らかの理由で XCode がフレームワークを見つけられないためだと思います。ここでは、フレームワークを参照するクラスを使用します。これは LoginViewController からのものです

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL: url];
[request setCompletionBlock:^{
    NSLog(@"File downloaded.");
    //NSData *data = [request responseData];
    //do stuff with data     
}];
[request setFailedBlock:^{
    NSError *error = [request error];
    NSLog(@"Error downloading file: %@", error.localizedDescription);
}];
[request startAsynchronous]; 

データを取得するために非同期サーバー呼び出しを実行しようとしています。

編集:私のプロジェクトのいくつかの .m ファイルのターゲット メンバーシップがチェックされていないことがわかりました。これを修正した後、私はまだ同様の問題を抱えています。これが私の新しいエラーです

Undefined symbols for architecture i386:
"_kReachabilityChangedNotification", referenced from:
  +[ASIHTTPRequest registerForNetworkReachabilityNotifications] in ASIHTTPRequest.o
  +[ASIHTTPRequest unsubscribeFromNetworkReachabilityNotifications] in ASIHTTPRequest.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

これを調査したところ、MobileCoreServices と CFNetwork フレームワークが見つからないことが唯一の原因のようです。これが、元の問題が原因であると私が考えたものです。フレームワークを含めましたが、XCode はフレームワークが存在しないように動作します。

4

1 に答える 1

0

デフォルトを変更したため、ターゲット メンバーシップは追加されません。すべての .m ファイルを選択すると、右側のナビゲーターで [ターゲット メンバーシップ] を選択できます。使用しているすべてのファイルのチェックボックスを必ず選択してください。

スクリーンショット

于 2012-06-11T21:27:56.067 に答える