2016-10-28 45 views
0

我寫信使用imageWithcontentsOfFile未能從模擬器的緩存目錄加載保存的圖像

NSURL *cacheDir = [[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory 
                 inDomains:NSUserDomainMask].lastObject; 
NSURL *avatarFileURL = [cacheDir URLByAppendingPathComponent:@"test.png" isDirectory:NO]; 
NSData *imageData = UIImagePNGRepresentation(avatarImage); 
[imageData writeToURL:avatarFileURL atomically:YES]; 

這工作得很好,我已經通過記錄avatarFile URL並加載它驗證了圖像的模擬器緩存目錄的圖像到顯示緩存圖像的瀏覽器中。

然後我嘗試讀取測試圖像回來,如果我使用imageWithContentsOfFile:imageWithData:我得到不同的結果如下:

NSURL *cacheDir = [[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory 
                 inDomains:NSUserDomainMask].lastObject; 
NSURL *avatarFileURL = [cacheDir URLByAppendingPathComponent:@"test.png" isDirectory:NO]; 
// Returns a nil. 
NSString *avatarFile = avatarFileUrl.absoluteString; 
UIImage *image1 = [UIImage imageWithContentsOfFile:avatarFile]; 

// Returns the image. 
NSData *imageData = [NSData dataWithContentsOfURL:avatarFileUrl]; 
UIImage *image2 = [UIImage imageWithData:imageData]; 

我茫然地解釋爲什麼imageWithContentsOfFile失敗,imageWithData作品當他們都在尋址相同的URL。我已通過記錄驗證了網址,並且網址完全相同。

任何人都知道爲什麼imageWithContentsOfFile不工作?

回答

1

你的問題是這一行:

NSString *avatarFile = avatarFileUrl.absoluteString; 

看的avatarFile值。這將是類似file:///....imageWithContentsOfFile:需要適當的文件路徑,而不是文件URL。

您需要將文件URL正確轉換爲路徑。這是做如下:

NSString *avatarFile = avatarFileUrl.path; 
+0

現在我覺得真的很愚蠢,因爲沒有發現:-)謝謝。 – drekka