使用NSURL从缓存加载数据不起作用

时间:2013-08-23 09:24:49

标签: objective-c caching nsdata nsurl

我正在尝试从缓存目录中加载照片。

这是我将照片写入缓存文件夹的代码:

+(BOOL)writeAData:(NSData *)imageData atURL:(NSURL *)fileUrl
{
    return [imageData writeToURL:fileUrl atomically:YES];
}

此代码工作正常,但是当我尝试从缓存文件夹中加载代码时遇到问题:

我在块中使用initWithContentsOfURL方法:

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

这是url的格式

file://localhost/Users/MarcoMignano/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/0E8E54D8-9634-41CF-934B-A7315411F12F/Library/Caches/image_cache/Meyer%20Library.jpg

网址是正确的,但是当我尝试使用上述方法时,我收到此错误:

 ..... [__NSCFString isFileURL]: unrecognized selector sent to instance 0x8a0c5b0 .....

这是我拿模特网址时的代码:

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];
    self.photos = [PhotoAlreadyDisplayed getAllPicture];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([sender isKindOfClass:[UITableViewCell class]]) {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
        if (indexPath) {
            if ([segue.identifier isEqualToString:@"Show Image"]) {
                if ([segue.destinationViewController respondsToSelector:@selector(setImageUrl:)]) {
                    NSURL *url = [[self.photos objectAtIndex:indexPath.row] valueForKey:@"url"];
                    [segue.destinationViewController performSelector:@selector(setImageUrl:) withObject:url];
                    [segue.destinationViewController setTitle:[self titleForRow:indexPath.row]];
                }
            }
        }
    }
}

网址有什么问题?我该怎么办呢?谢谢

我找到了解决方案: 当我加载模型的url时,我需要使用fileURLWithPath方法初始化url:

NSURL *url =  [NSURL fileURLWithPath:[[self.photos objectAtIndex:indexPath.row] valueForKey:@"url"]];

现在一切正常,非常感谢你的帮助

2 个答案:

答案 0 :(得分:0)

[NSData initWithContentsOfURL:]期望传入的参数为NSURL。看起来您可能传入的是字符串,而不是NSURL。是这种情况吗?

编辑:只是幽默我 - 尝试更换

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

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

会发生什么?


虽然看起来您没有成功从initWithContentsOfURL:返回,但下面的代码段可能对其他人有用:

NSError *error;
NSData *data = [[NSData alloc] initWithContentsOfURL:TestURL options:0 error:&error];
if(data) {
  NSLog(@"Success");
}
else {
  NSLog(@"Failed: %@", Error);
}

答案 1 :(得分:0)

解决方案:当我加载模型的url时,我需要使用fileURLWithPath方法初始化url:

NSURL *url =  [NSURL fileURLWithPath:[[self.photos objectAtIndex:indexPath.row] valueForKey:@"url"]];

现在一切正常,非常感谢你的帮助