我使用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吗?
还有第二个问题:使用字符串NSURL
和NSData
是否有意义?我认为出于记忆的原因,这将是最好的方式。
提前谢谢你, 尼科斯
编辑:循环的变量在代码之前定义,循环工作正常。变量rootURL
也是标题中定义的常量。 URL构建正常并且可以正常工作。
答案 0 :(得分:1)
我想问的是,如果您请求不存在的图像,服务器实际上会做什么
如果它为您提供了404,-dataWithContentsOfURL:
应该返回nil
- 但如果没有,则会创建一个包含结果的NSData
实例,该实例恰好不包含任何有用的图像数据
答案 1 :(得分:0)
测试代码(一次运行)。如果图像不存在,我会按预期得到写入错误。返回的是(NULL)。在这种情况下,我认为其行为相同,并指向零值。
有一个stackoverflow帖子试图解释它Here. are-null-and-nil-equivalent