1

この質問の間、ユーモアを交えてください。実際の状況は非常に複雑であるため、これはやや疑似コードです。必要がない限り、この方法で画像をロードすることはありません。私がする必要があると仮定します。

NSURL *bgImageURL = [NSURL URLWithString:@"https://www.google.com/images/srpr/logo3w.png"];

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:bgImageURL]];

[self.anIBOutletOfUIImageView setImage:img];

しかし、私はクラッシュします

-[__NSCFData _isResizable]: unrecognized selector sent to instance 0x9508c70

URL から画像を NSData にロードし、その NSData を UIImage にロードして、その UIImage を UIImageView の画像として設定するにはどうすればよいですか?

繰り返しますが、これはナンセンスのように聞こえますが、使用している画像キャッシュ システムのために、このようにする必要があります :(

4

2 に答える 2

5

私が通常この状況をどのように処理するか(コンパイルされていない、テストされていない):

NSURL * url = [NSURL URLWithString:@"https://www.google.com/images/srpr/logo3w.png"];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue currentQueue]
                       completionHandler:^(NSURLResponse * resp, NSData * data, NSError * error) {

    // No error handling - check `error` if you want to
    UIImage * img = [UIImage imageWithData:data];
    [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:img waitUntilDone:YES];

}];

これにより、への呼び出しによって暗示される長時間実行されるネットワークリクエストが回避されるdataWithContentsOfURL:ため、画像のデータがダウンロードされている間、アプリはメインスレッドで処理を続行できます。

ちなみに、この質問と同じエラーが発生しているようです。オブジェクト割り当ての問題が発生していないことを確認することをお勧めします。

于 2012-05-06T20:16:13.930 に答える
1

このコードを新しい iPad の「シングル ビュー アプリケーション」テンプレートに挿入しました。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSURL *bgImageURL = [NSURL URLWithString:@"https://www.google.com/images/srpr/logo3w.png"];
    NSData *bgImageData = [NSData dataWithContentsOfURL:bgImageURL];
    UIImage *img = [UIImage imageWithData:bgImageData];
    [[self Imageview] setImage:img];
}

画像が正常に読み込まれるようになりました。UIImageView のさまざまなコンテンツ モードを試してみたところ、すべて期待どおりに機能しました。

ゼロから始めた場合、同じ問題が発生しますか?

エラー メッセージは、「_isResizable」のメッセージを NSData オブジェクトに送信していることを示しています。うっかりUIImageViewimageプロパティを のNSData代わりに に設定している可能性がありUIImageます。

編集・更新

私の「作業用」コピーは非作業用コピーからわずかに変更されていたため、戻ってコードを「ワンライン」するさまざまなバージョンを試して、それが重要かどうかを確認しました。コードを壊すことができませんでした。私の推測では、問題のコードは壊れていませんが、近くに何かが...

于 2012-05-06T20:22:59.757 に答える