2011-08-24 69 views
0

我使用ASIHTTPRequest庫來下載圖片,我將我的圖片存儲在一個NSMutableDictionnary(key = url,value = UIImage),允許我下載一次我需要的圖片我的看法。這部分運作良好。通過NSUserDefaults存儲UIImage在iPhone的內存

現在我想保存我NSMutableDictionnary在iPhone內存名爲「imagesDownloaded」一個時間我的所有應用程序的每個圖像,我做下載感謝這個代碼

UIImage *img = [[UIImage alloc] initWithData:[request responseData]]; 
[imagesDownloaded setValue:img forKey:request.url.description]; 
userDatas = [NSUserDefaults standardUserDefaults]; 
[userDatas setValue:imagesDownloaded forKey:@"Pictures"]; 
[userDatas synchronize]; 

但它不工作,當我這樣做時:

NSLog(@"%@", [userDatas objectForKey:@"Pictures"]); 

該值始終爲「null」。

怎麼了?

感謝

回答

1

正如其他人所說,你不能直接將圖像保存到NSUserDefaults

雖然你可以將其保存爲編碼字符串或別的東西可以保存在NSUserDefaults,但由於圖像的數據比正常NSUserDefaults數據大得多,它,如果你保存圖像到它的壞的表現。

最好的辦法是將圖像保存爲iOS文件系統的文件,然後將圖像的路徑保存到NSUserDefaults

0

不能直接存儲圖像爲NSUserDefaults。從the documentation

NSUserDefaults類提供用於訪問 常見類型如浮標方便的方法,雙打,整數,布爾值,和URL。甲 缺省對象必須是一個屬性列表,也就是,的一個實例(用於集合或 的實例的組合):NSDataNSStringNSNumberNSDateNSArray,或者NSDictionary。如果要存儲任何其他類型的對象,則通常應將其歸檔,以創建NSData的實例 。

由於您已經擁有圖片的數據([request responseData]),請嘗試將其存儲到默認值中。您還可以嘗試將NSData對象直接放入陣列中,而不是UIImage對象,然後將其存儲。

要了解更多關於使用用戶的默認設置,看看蘋果的User Defaults Programming Topics

0

你是存儲用戶默認的對象(和它所有的孩子),必須是對象的plist中的類型,或者換句話說, NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。

我最近做了一些類似的,它涉及到這樣的代碼來存儲項目:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:appSettings]; 
[prefs setObject:myEncodedObject forKey:@"appSettings"]; 
[prefs synchronize]; 

需要我的appSettings類,我創建encodeWithCoder和的initWithCoder方法,但一旦我這樣做,我是能夠將該類放入用戶默認值中。