【问题标题】:JMImageCache in a simple test app crashes with EXC_BAD_ACCESS一个简单的测试应用程序中的 JMImageCache 因 EXC_BAD_ACCESS 而崩溃
【发布时间】:2014-01-30 13:57:57
【问题描述】:

在 Xcode 5.0.2 中

  1. 我为 iPhone 创建了a blank single view app
  2. 然后将“male.png”图片添加到项目中,
  3. 将 UIImageView 拖到情节提要
  4. 最后将以下代码添加到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 webpageJake 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];
}

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

【问题讨论】:

    标签: ios iphone objective-c ipad uiimageview


    【解决方案1】:

    这是 JMImageCache 中的一个错误。 setImageWithURL:key:placeholder:completionBlock: 调用自身,耗尽堆栈。

    要解决该错误,请调用较长形式的方法:

    [_imageView setImageWithURL:[NSURL URLWithString:kAvatar]
        key:nil
        placeholder:[UIImage imageNamed:@"male.png"]
        completionBlock:nil
        failureBlock:nil];
    

    或者,使用旧版本的库(例如0.4.0)。看起来这个 bug 是在 1af09be78a 中引入的。

    【讨论】:

    猜你喜欢
    • 2014-01-30
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多