当URL为空时,dataWithContentsOfURL返回值不为nil

时间:2010-07-06 16:22:14

标签: objective-c iphone cocoa

我使用dataWithContentsOfURL时遇到问题。 我正在循环中从互联网上加载一些图像。 问题是:如果URL上的图像不存在,dataWithContentsOfURL不会按预期返回nil。苹果引用表示如果无法创建NSData则返回nil。 这是代码:

NSString *TermineImgFileName = nil;
NSString *TermineImgPath = nil;
NSURL *TermineImgURL = nil;
NSData *TermineImg = nil;   
for (deviceTermineHighInt; deviceTermineHighInt <= serverTermineHighInt; deviceTermineHighInt++) {
    TermineImgFileName = [NSString stringWithFormat:@"Termine%i.png", deviceTermineHighInt];
    TermineImgURL = [rootURL URLByAppendingPathComponent:TermineImgFileName];
    TermineImg = [NSData dataWithContentsOfURL:TermineImgURL];
    if (TermineImg != nil) {
        TermineImgPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:TermineImgFileName];
        [TermineImg writeToFile:TermineImgPath atomically:YES];
        updateCount += 1;
        NSLog(@"File %@ saved", TermineImgFileName);
    }
    else {
        NSLog(@"Write Error");
    }               
    TermineImg = nil;
}

你知道为什么如果URL上的文件不存在,该方法不会返回nil吗?

还有第二个问题:使用字符串NSURLNSData是否有意义?我认为出于记忆的原因,这将是最好的方式。

提前谢谢你, 尼科斯

编辑:循环的变量在代码之前定义,循环工作正常。变量rootURL也是标题中定义的常量。 URL构建正常并且可以正常工作。

2 个答案:

答案 0 :(得分:1)

我想问的是,如果您请求不存在的图像,服务器实际上会做什么 如果它为您提供了404,-dataWithContentsOfURL:应该返回nil - 但如果没有,则会创建一个包含结果的NSData实例,该实例恰好不包含任何有用的图像数据

答案 1 :(得分:0)

测试代码(一次运行)。如果图像不存在,我会按预期得到写入错误。返回的是(NULL)。在这种情况下,我认为其行为相同,并指向零值。

有一个stackoverflow帖子试图解释它Here. are-null-and-nil-equivalent