【问题标题】:NSData initWithContentsOfURL ErrorNSData initWithContentsOfURL 错误
【发布时间】:2013-08-26 07:56:56
【问题描述】:

我正在尝试从网络加载图像。为了初始化数据我使用这个方法:

NSData *imageData = [[NSData alloc] initWithContentsOfURL:self.imageUrl];

但我收到此错误:

[__NSCFString isFileURL]: unrecognized selector sent to instance 0x817a4f0
2013-08-26 09:45:53.221 CorePhoto[1643:3f03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString isFileURL]: unrecognized selector sent to instance 0x817a4f0'

当然 self.imageUrl 是一个 NSURL 属性。

这是 imageUrl url 的示例:

http://farm5.static.flickr.com/4016/4555417946_e6332481b3_b.jpg

这是我的方法的完整代码:

- (void)resetImage
{
    if (self.scrollView) {
        if (self.imageUrl) {
            //before to set the content, we reset it
            self.scrollView.contentSize = CGSizeZero;
            self.imageView.image = nil;
            [self.spinner startAnimating];
            dispatch_queue_t loadImageQ = dispatch_queue_create("load image thread", NULL);
            dispatch_async(loadImageQ, ^(void) {
                [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
                NSData *imageData = [[NSData alloc] initWithContentsOfURL:self.imageUrl];
                [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
                UIImage *image = [[UIImage alloc] initWithData:imageData];
                dispatch_async(dispatch_get_main_queue(), ^(void) {
                    if (image) {
                        self.scrollView.zoomScale = 1.0;
                        self.scrollView.contentSize = image.size;
                        self.imageView.image = image;
                        self.imageView.frame = CGRectMake(0, 0, image.size.width, image.size.height);
                    }
                    [self.spinner stopAnimating];
                });
            });
        }
    }
}

我的 initWithContentsOfURL 方法有什么问题?谢谢 谢谢

【问题讨论】:

  • "当然 self.imageUrl 是一个 NSURL 属性。"不,这不对。根据错误,它是一个 __NSCFString 。您需要从字符串创建一个 URL。

标签: objective-c nsdata nsurl cs193p


【解决方案1】:

imageUrl 可以定义为NSURL 属性,但您已将其值设置为NSString 实例。在许多情况下,这可能不会给您一个编译器警告,并且在您尝试使用它之前不会引发异常。

检查您设置imageUrl 的位置并确保您验证类型并创建NSURL

【讨论】:

  • 谢谢,错误是我设置属性的地方,因为我传递的是字符串而不是 NSURL: NSURL *url = [[photo.photoURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];如果我将此方法更改为: NSURL *url = [NSURL URLWithString:[photo.photoURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];工作正常。感谢并为愚蠢的错误感到抱歉 XD。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
相关资源
最近更新 更多