在Xcode 5.0.2中
我为iPhone创建a blank single view app,
然后在项目中添加“ male.png”图片,
将UIImageView拖到情节提要
最后将以下代码添加到viewDidLoad
:_imageView.image = [UIImage imageNamed:@"male.png"];
这很好用:
然后,我从JMImageCache project添加4个文件,并将ViewController.m更改为:
#import "ViewController.h"
#import "JMImageCache.h"
static NSString* const kAvatar = @"http://gravatar.com/avatar/55b3816622d935e50098bb44c17663bc.png";
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[_imageView setImageWithURL:[NSURL URLWithString:kAvatar]
placeholder:[UIImage imageNamed:@"male.png"]];
}
@end
不幸的是,这导致app crash并显示错误消息
Thread 1: EXC_BAD_ACCESS
:在his webpage Jake Marsh(JMImageCache的作者)处指出:
JMImageCache故意使用NSString对象而不是NSURL来简化事情,并在各处减少[NSURL URLWithString:@“ ...”]位。如果您看到任何奇怪的EXC_BAD_ACCESS异常,只需注意一下,请确保您传入的是NSString而不是NSURL。
但是(作为iOS编程新手)我不明白,马什先生究竟是什么意思-因为他的文件UIImageView+JMImageCache.m声明了public方法的第一个参数为
NSURL
:- (void) setImageWithURL:(NSURL *)url placeholder:(UIImage *)placeholderImage {
[self setImageWithURL:url key:nil placeholder:placeholderImage];
}
笔记可能过时了,我该如何修复我的应用程序?
最佳答案
这是JMImageCache中的错误。 setImageWithURL:key:placeholder:completionBlock:
自我调用,耗尽堆栈。
要解决该错误,请调用该方法的更长形式:
[_imageView setImageWithURL:[NSURL URLWithString:kAvatar]
key:nil
placeholder:[UIImage imageNamed:@"male.png"]
completionBlock:nil
failureBlock:nil];
或者,使用旧版本的库(例如0.4.0)。该错误似乎是在1af09be78a中引入的。
关于ios - 一个简单的测试应用程序中的JMImageCache会因EXC_BAD_ACCESS而崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21063896/