一个简单的测试应用程序中的JMImageCache与EXC_BAD_ACCESS崩溃

时间:2014-01-11 15:09:39

标签: ios iphone objective-c ipad uiimageview

在Xcode 5.0.2中

  1. 我为iPhone创建a blank single view app
  2. 然后将“male.png”图像添加到项目中,
  3. 将UIImageView拖到故事板
  4. 最后将以下代码添加到viewDidLoad

    _imageView.image = [UIImage imageNamed:@"male.png"];

  5. 这很有效:

    enter image description here

    然后我添加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

    crash

    his webpage Jake Marsh(JMImageCache的作者)注意到:

      

    JMImageCache有目的地使用NSString对象而不是NSURL来简化操作并减少[NSURL URLWithString:@“...”]位到处。如果您发现任何奇怪的EXC_BAD_ACCESS异常,请注意一些事项,确保您传入NSString而不是NSURL。

    但是(作为iOS编程新手)我不明白,Marsh先生究竟是什么意思 - 因为他的文件UIImageView+JMImageCache.m将公共方法的第一个参数声明为NSURL

    - (void) setImageWithURL:(NSURL *)url placeholder:(UIImage *)placeholderImage {
        [self setImageWithURL:url key:nil placeholder:placeholderImage];
    }
    

    笔记可能已过时,我该如何修复我的应用程序?

1 个答案:

答案 0 :(得分:3)

这是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中引入的。