web-dev-qa-db-ja.com

SDWebImage:UITableViewCellの画像を設定するために使用すると、setImageWithURLが失敗します

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"]];    
15
Chim

最終的にすべての.hファイルと.mファイルをプロジェクトに挿入しましたが、正常に機能しました。 .aファイルと.hファイルのみを含めた場合にも同じエラーが発生しました。

6
Chrizzz

によると: 静的ライブラリ内のobjective-cカテゴリのリンク

XCodeのリンカーのバグのため、ビルドターゲットを設定する「その他のリンカーフラグ」を設定する必要があります。次のようにフラグを設定すると、このエラーが解消されます。

-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a
17
Steven Veltema

これにより、問題が解決します。[ビルド設定]タブを開き、[リンク]セクションで、[その他のリンカーフラグ]設定を見つけて、[-ObjC]フラグを追加します。 enter image description here

11
Hossam Ghareeb

私のような誰かが、適切なインストール手順をすべて実行した後でも、ここで他のすべての回答(force_loadやload_allなど)を確認しても問題が解決しない場合は、オンラインで検索した後に学んだことを次に示します。

  • この問題は、iPhone5Sまたは64ビットシミュレーターを使用している場合にのみ発生します
  • これはlibwebpの問題です

この問題の解決策:これは、アプリに64ビットプロセッサが必要ない場合にのみ実行してください(あまりにもこの文が有効かどうかを知るためのiOSプログラミングの初心者)

  1. ビルド設定>アーキテクチャに移動します

  2. [アーキテクチャ]で、[Standard architectures (armv7,armv7s)]を選択します

  3. [アクティブなアーキテクチャのみのビルド]で、DebugReleaseの両方ではいであることを確認します

私の情報源: https://github.com/rs/SDWebImage/issues/494

私のように、あなたの問題を解決しようとしているときにこれを見つけた人たちにこれが役立つことを願っています=)

9
SilverHood

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では、ビルド設定を正しく変更するために、ゆっくりとダブルクリックする必要があるようです。通常のダブルクリックを実行すると、完全にねじ込まれ、機能していないポップアップが表示されます。

4
Andz

LibSDWebImage.aをビルドフェーズ>リンクバイナリとライブラリに追加する同じ問題を解決しました。

2
Rajesh

ここでドキュメントを読むと https://github.com/rs/SDWebImage 下部にdownloadリンクがあります正しいファイルを使用して ダウンロード 。その例に従うと、それは完全に機能します。

私が犯した間違い、そして他の人のように思われる間違いは、githubプロジェクトをダウンロードしてそれを使ってみたことです。

1
Harry

「ImageIO.framework」をメインプロジェクトにリンクすると、すべてがうまくいき始めました。

1
ingh.am

SDWebimagesのファイルをXcodeにプルするときに選択をチェックアウトし、追加されたフォルダーに「グループの作成」をマークし、「フォルダー参照の作成」をマークしないでください。

写真とまったく同じようにマークします。

enter image description here

0
mob

AFNetworkingフレームワークを使用している場合は、コンパイルされたファイルにUIIMageView + AFNetworking.mが含まれていることを確認してください。

0
Nosayr Yassin

リンクされたバイナリにlibSDWebImage.aを追加する必要があります。また、他のリンカーフラグも確認する必要があります。これは、-ObjCである必要があります。

0
Jasveer Singh

「その他のリンカーフラグ」を-all_loadに設定することもできます。これにより、外部フレームワーク(ファイルピッカーフレームワークなど)がSDWebImageに対してリンクする必要があるという問題が解決されます。

0
filitchp

-force_loadは、このリンクの問題を修正するための基本的な問題(達成の問題が発生した場合)を修正していません。

  1. sDWebImageの編集スキーム、
  2. リリース用に設定されたスキームを実行する
  3. 実行(デバイスを使用)
  4. libSDWebImage.aはrelease-iphoneosディレクトリに生成されます。
  5. set target-> BuildPhase-> link Binarywithlibrary ..このライブラリを追加します。
  6. 完了..
0
Mark Yang