2011-05-18 93 views
2

我從Web服務器加載圖像文件,然後將其保存到nsuserdefaults。保存代碼大致是:保存/重新加載圖像並刪除舊圖像

NSData *imageData = UIImagePNGRepresentation(theImage); // theImage is a UIImage 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:imageData forKey:string]; // string is a 3-dig number which identifies image 

現在,顯然我在錯誤的腳已經,因爲不推薦用於圖像NSUserDefaults的..

但我想要做的是保存在某個地方這些圖像,因此無需重新下載即可訪問它們。此外,我想刪除舊圖像(假設一天過去,或只保留最近10次下載的圖像)?有這個好技術嗎?

回答

2

我會用出色的ASIHTTPRequest library下載圖像擺在首位:)

這取代NSURLConnection的,你可以指定如何緩存圖像 - 你只需重新請求來自同一個URL的圖像和ASIHTTPRequest將返回緩存的。

+0

是否有一個在UITableView中使用的ASIHTTPRequest緩存圖像的工作示例? – cannyboy 2011-05-20 11:35:33

3

說到圖像,我建議將它們保存到磁盤,應用程序的沙箱中有Documents文件夾。您可以輕鬆地將文件的名稱存儲在userdefaults中,並稍後使用它來訪問該文件。

如果你想找出如果圖像是「太老了」,你可以做這樣的事情:

int aDayInSeconds = 60 * 60 * 24; 

NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:fileName 
                      error:nil]; 
NSDate *creationDate = [attributes objectForKey:@"NSFileCreationDate"]; 

if ([[NSDate date] timeIntervalSinceDate:creationDate] > aDayInSeconds) { 
    // Delete, reload, whatever you need. 
} 
3

根據你的目的,也有一些地方,你可以保存下載的圖像:

  • 如果你想保存,直到被刪除的文件,寫入文件目錄:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
  • 如果你想存儲文件,直到你刪除它,你可能曾經使用iTunes file sharing也不要WA nt這些特定的文件共享,寫入應用程序支持目錄:[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) objectAtIndex:0]
  • 如果您想允許系統刪除它,如果設備空間不足(並且不關心它是否在設備備份時保存以上),使用高速緩存目錄:[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]
  • 如果你只是保存它暫時當你處理它,並會刪除它向右走,使用的臨時目錄:如果您想要的任何保留規則像NSTemporaryDirectory()

「只保留10個」或「在一天之後刪除」,你必須自己在代碼中實現它。您可以依賴文件修改日期(來自NSFileManager的attributesOfItemAtPath:error:),或者在NSUserDefaults或Core Data中保留文件名到最新的映射,或者只是命名文件以包含日期。

相關問題