【发布时间】:2011-02-16 11:15:23
【问题描述】:
我有一个图像的 URL(从 UIImagePickerController 获得),但我不再有图像在内存中(该 URL 是从应用程序的先前运行保存的)。我可以再次从 URL 重新加载 UIImage 吗?
我看到 UIImage 有一个 imageWithContentsOfFile: 但我有一个 URL。我可以使用 NSData 的 dataWithContentsOfURL: 来读取 URL 吗?
编辑1
根据@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,然后是 forwarding_prep_0,然后是 forwarding,然后是 -[NSObject doesNotRecognizeSelector]。
知道为什么我的 NSString(photoURL 的地址是 0x536fbe0)不响应长度吗?为什么它说它不响应 -[NSURL 长度]?难道不知道param是NSString,不是NSURL吗?
编辑2
好的,代码的唯一问题是字符串到 URL 的转换。如果我对字符串进行硬编码,其他一切都可以正常工作。所以我的 NSString 出了点问题,如果我无法弄清楚,我想这应该作为一个不同的问题出现。插入这一行(我粘贴了上面控制台日志中的路径),它工作正常:
photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";
【问题讨论】:
-
看起来 photoURL 已经是 NSURL,而不是 NSString,因为 NSLog 处理了它。
-
@drawn:看起来文档中的错误。它说 UIImagePickerControllerMediaURL 是一个 NSString 但它实际上是一个 NSURL 对象。
-
DLImageLoader 库令人难以置信。坚如磐石,没有 doco,一个命令,一切都很完美。多么好的发现。
-
我第二(第三?)DLImageLoader。我怀疑这个页面上关于它的 cmets 是否客观 - 但我还是尝试了它,它确实工作得很好。我在 UITableViewCell 中有一个 UIImageView。我所做的只是将 UIImageView 替换为 DLImageView,然后调用 imageFromUrl: 方法来加载图像,一切正常——异步加载、缓存等。再简单不过了。
-
DLImageLoader 仍然很棒,另一个不错的是 Haneke,虽然它因维护不善而受到了一点影响。
标签: ios iphone uiimage uiimagepickercontroller