最佳答案
我有一个图像的 URL (从 UIImagePickerController 获得的) ,但是我不再在内存中保存图像(URL 是从前一次运行的应用程序中保存的)。我可以再次从 URL 重新加载 UIImage 吗?
我看到 UIImage 有一个 image WithContentsOfFile: 但是我有一个 URL。我可以使用 NSData 的 dataWithContentsOfURL: 来读取 URL 吗?
根据@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,然后调用 CFStringGetLlength,然后调用 Forwarding _ prep _ 0,然后调用 转发,然后调用-[ NSObject doesNot認 izeSelector ]。
知道为什么我的 NSString (photoURL 的地址是0x536fbe0)不响应长度吗?为什么它说它不响应-[ NSURL 长度] ?难道它不知道 param 是 NSString 而不是 NSURL 吗?
好的,代码的唯一问题是字符串到 URL 的转换。如果我对字符串进行硬编码,其他一切都会正常工作。所以我的 NSString 有些问题,如果我不能解决它,我想这应该作为一个不同的问题。插入这一行后(我粘贴了上面控制台日志中的路径) ,它工作得很好:
photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";