在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/

10-10 21:05