在这个问题上,我需要你来幽默我。这有点伪代码,因为实际情况非常复杂。除非我需要,否则我不会以这种方式加载图像。假设我需要。
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的图像?
再次,我意识到这听起来像废话,但由于我使用的图像缓存系统,我必须这样做:(
答案 0 :(得分: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:
所暗示的长时间运行的网络请求,因此您的应用可以在数据下载图像时继续在主线程上执行操作。
作为旁注,您似乎遇到了与this question相同的错误;你可能想检查一下你是否遇到了对象分配问题。
答案 1 :(得分: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尝试了不同的内容模式,它们都按预期工作。
如果你从头开始,你会遇到同样的问题吗?
错误消息表明您正在向NSData对象发送“_isResizable”消息。也许您无意中将UIImageView
的{{1}}属性设置为image
而不是NSData
。
修改/更新强> 的
我甚至回去尝试了不同版本的“单行”代码,看看是否有任何重要的,因为我的“工作”副本稍微改变了你的非工作副本。我无法让代码破解。我的猜测是有问题的代码没有被破坏,但附近的东西是......