1. ホーム
  2. ios

[解決済み] UIImageをURLから読み込むことはできますか?

2022-05-27 23:43:29

質問

画像のURL(UIImagePickerControllerから取得)を持っていますが、メモリ内に画像がありません(URLはアプリの以前の実行から保存されたものです)。 URL から UIImage を再度読み込むことはできますか。

UIImage には imageWithContentsOfFile: があるようですが、私は URL を持っています。 NSData の dataWithContentsOfURL: を使って URL を読み込むことはできますか。

EDIT1


Danielの回答に基づいて、以下のコードを試しましたが、うまくいきません......。

NSLog(@"%s %@", __PRETTY_FUNCTION__, photoURL);     
if (photoURL) {
    NSURL* aURL = [NSURL URLWithString:photoURL];
    NSData* data = [[NSData alloc] initWithContentsOfURL:aURL];
    self.photoImage = [UIImage imageWithData:data];
    [data release];
}

実行するとコンソールに

-[PhotoBox willMoveToWindow:] file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG
*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0'

コールスタックを見ると、URLWithStringを呼んでいて、URLWithString:relativeToURL:、initWithString:relativeToURL:、_CFStringIsLegalURLString、CFStringGetLength、そして、URLStringを呼んでいます。 forwarding_prep_0 では 転送 であれば、-[NSObject doesNotRecognizeSelector]となります。

私の NSString (photoURL のアドレスは 0x536fbe0) が length に反応しないのはなぜか、何か思い当たることはありますか? なぜ -[NSURL length] に反応しないと言うのでしょうか? paramがNSStringであり、NSURLではないことを知らないのでしょうか?

EDIT2


OK、このコードの唯一の問題は、文字列からURLへの変換です。 文字列をハードコードすると、他のすべてが正常に動作します。 だから、何かが私のNSStringで間違っていて、もし私がそれを理解できないなら、私はそれが別の質問として入るべきだと思います。 この行を挿入すると(私は上記のコンソールログからパスを貼り付けました)、うまく動作します。

photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";

どのように解決するのですか?

この方法でできます(同期ですが、コンパクトです)。

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:MyURL]]];

より良い方法は、AppleのLazyTableImagesを使用してインタラクティブ性を維持することです。