SetImageWithURLを呼び出すと、次のように失敗します。
[UIImageView setImageWithURL:placeholderImage:]:認識されないセレクターがインスタンス0x149a20に送信されました2011-12-14 18:11:38.060 [781:707]キャッチされない例外 'NSInvalidArgumentException'が原因でアプリを終了しています、理由: '-[UIImageView setImageWithURL :placeholderImage:]:認識されないセレクターがインスタンス0x149a20に送信されました '
SDWebImageManagerを正常に使用できるため、SDWebImage
プロジェクトと必要なヘッダーが正しく含まれていることを確認できます。
以下は、UIImageViewカテゴリメソッドsetImageWithURL
を呼び出したコードです。
NSURL* url = [NSURL URLWithString:@"www.abc.com/abc.png"];
[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"abc.png"]];
最終的にすべての.hファイルと.mファイルをプロジェクトに挿入しましたが、正常に機能しました。 .aファイルと.hファイルのみを含めた場合にも同じエラーが発生しました。
によると: 静的ライブラリ内のobjective-cカテゴリのリンク
XCodeのリンカーのバグのため、ビルドターゲットを設定する「その他のリンカーフラグ」を設定する必要があります。次のようにフラグを設定すると、このエラーが解消されます。
-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a
これにより、問題が解決します。[ビルド設定]タブを開き、[リンク]セクションで、[その他のリンカーフラグ]設定を見つけて、[-ObjC]フラグを追加します。
私のような誰かが、適切なインストール手順をすべて実行した後でも、ここで他のすべての回答(force_loadやload_allなど)を確認しても問題が解決しない場合は、オンラインで検索した後に学んだことを次に示します。
この問題の解決策:これは、アプリに64ビットプロセッサが必要ない場合にのみ実行してください(あまりにもこの文が有効かどうかを知るためのiOSプログラミングの初心者)
ビルド設定>アーキテクチャに移動します
[アーキテクチャ]で、[Standard architectures (armv7,armv7s)
]を選択します
[アクティブなアーキテクチャのみのビルド]で、Debug
とRelease
の両方ではいであることを確認します
私の情報源: https://github.com/rs/SDWebImage/issues/494
私のように、あなたの問題を解決しようとしているときにこれを見つけた人たちにこれが役立つことを願っています=)
SDWebImageのドキュメントでは、「その他のリンカーフラグ」を-ObjCに設定する必要があると記載されています。これは私にはうまくいきませんでした。代わりに、-all_loadに設定しました。また、-ObjCを削除する必要がありました。何が起こっているかの説明はここで見つけることができます:
http://developer.Apple.com/library/mac/#qa/qa1490/_index.html
また、-ObjCが失敗する理由についても説明します: "重要:64ビットおよびiPhone OSアプリケーションの場合、-ObjCがカテゴリのみを含む静的ライブラリからオブジェクトファイルをロードできないリンカーバグがあります。クラスはありません。回避策は、f-all_loadまたは-force_loadを使用することです。 )フラグ "
-all_loadを使用すると、実行可能ファイルのサイズが大きくなります。 -force_loadを使用して、これをいくらか軽減できます。 SDWebImage 2.7.3の場合、ビルド設定の「その他のリンカーフラグ」で「-load_all $(SRCROOT)/SDWebImage.framework/SDWebImage」を設定してこれを行いました。一部の情報源がアドバイスしているlibSDWebImage [ARC] .aへのリンクは、私には機能しませんでした。
ちなみに、Xcode 4.4では、ビルド設定を正しく変更するために、ゆっくりとダブルクリックする必要があるようです。通常のダブルクリックを実行すると、完全にねじ込まれ、機能していないポップアップが表示されます。
LibSDWebImage.aをビルドフェーズ>リンクバイナリとライブラリに追加する同じ問題を解決しました。
ここでドキュメントを読むと https://github.com/rs/SDWebImage 下部にdownloadリンクがあります正しいファイルを使用して ダウンロード 。その例に従うと、それは完全に機能します。
私が犯した間違い、そして他の人のように思われる間違いは、githubプロジェクトをダウンロードしてそれを使ってみたことです。
「ImageIO.framework」をメインプロジェクトにリンクすると、すべてがうまくいき始めました。
AFNetworkingフレームワークを使用している場合は、コンパイルされたファイルにUIIMageView + AFNetworking.mが含まれていることを確認してください。
リンクされたバイナリにlibSDWebImage.aを追加する必要があります。また、他のリンカーフラグも確認する必要があります。これは、-ObjCである必要があります。
「その他のリンカーフラグ」を-all_loadに設定することもできます。これにより、外部フレームワーク(ファイルピッカーフレームワークなど)がSDWebImageに対してリンクする必要があるという問題が解決されます。
-force_loadは、このリンクの問題を修正するための基本的な問題(達成の問題が発生した場合)を修正していません。