2010-07-06 38 views
1

我在使用dataWithContentsOfURL時遇到問題。 我正在從循環中加載一些來自互聯網的圖像。 問題是:如果URL中的圖像不存在,dataWithContentsOfURL不會按預期返回零。蘋果引用說如果無法創建NSData,它返回nil。 下面的代碼:dataWithContentsOfURL當URL爲空時返回值不爲零

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中的文件不存在?

第二個問題:像我一樣使用字符串NSURLNSData是否合理?我想出於記憶的原因,這將是最好的方式。

謝謝你在前進, 尼科斯

編輯:爲循環變量的代碼之前被定義,循環工作正常。變量rootURL也是頭中定義的常量。該URL構建得很好,它的工作原理。

+0

如果蘋果說「如果NSData無法創建,它返回nil」,這可能意味着如果無法創建NSData對象,則返回nil,而如果無法獲取URL,則返回nil。 – Adrian 2010-07-06 16:47:55

回答

1

我想說的問題是,如果你請求一個不存在的圖像什麼的服務器實際上做了計算器後。
如果它給你404,-dataWithContentsOfURL:應該返回nil - 但如果它不,將會創建一個帶有結果的NSData實例,該實例恰好不包含任何有用的圖像數據。

+0

有趣的方法!我將用不同的服務器測試明天。 – leMonch 2010-07-06 21:52:57

+0

你是對的!問題出在服務器端。我今天嘗試打開一個不存在的文件News1.png,而服務器加載了News2.png。 非常感謝! – leMonch 2010-07-07 12:04:47

0

測試代碼(單次運行)。如果圖像不存在,則按預期收到寫入錯誤。 Whats返回是(NULL)。我認爲在這種情況下行爲相同,並指向零值。

有它試圖解釋它Here. are-null-and-nil-equivalent

+0

奇怪的行爲!在我的循環中,第一個映像不在服務器上,但是也創建了第二個文件的Data(Image)。 (當循環運行兩次並且第一個圖像不存在時,第二個圖像存在) 我會在明天再次用新鮮的大腦重新考慮例程。 :) – leMonch 2010-07-06 21:50:00

+0

markhunte:'NULL'和'nil'是等價的(不同的目的,但都是空指針)。一個NSNull對象不等於它們; '無'是沒有物體。 – 2010-07-07 00:43:04

相關問題