2012-07-01 18 views
0

我正在構建一個應用程序,允許用戶查看網站上的圖片。我在屏幕上加載圖片,然後一旦用戶點擊,我給他選擇添加到他的收藏夾。作爲NSData存儲UIImage返回不同​​的結果

爲了讓他能夠離線查看圖像,我將UIImageJpegRepresentation存儲在一個NSMutableDictionary中,後來進入NSUserDefaults。

當用戶在在線圖像查看部分,如果他遇到了一個偏愛的圖像,他可以從收藏夾中刪除它(我通過比較NSData與我存儲的內容來檢查他的最愛之一NSUserDefaults的)。

現在出現這個問題:當用戶進入收藏夾部分並從NSUserDefaults加載圖像時,NSUserDefaults中的NSData與屏幕上圖像視圖中圖像的NSData的比較失敗。因此,當他在收藏夾部分點擊圖像時,並沒有檢測到圖像本身是NSUserDefaults中的最愛,我假設這兩個NSData由於某種原因而不同。

難道有人請澄清爲什麼會發生這種情況,並可能提示如何解決它?

+0

With isEqualToData: –

回答

1

圖像可能被壓縮的方式有所不同UIImageJPEGRepresentation - JPEG是有損格式。

除此之外,這看起來並不是達到既定目標的最佳方式。如果用戶正在查看大量圖片並且擁有大量收藏圖片,則表現會很差。一個更好的解決方案是存儲某種圖像ID,例如,一個URL。比較URL字符串可能比比較整個圖像快幾個數量級。

+0

是的,我同意。但唯一的問題是,如果我要存儲URL,用戶將無法查看任何脫機。而我只打算存儲大約100張圖片。這太多了嗎? –

+0

如果你喜歡,你也可以存儲圖像。如果你熱衷於將它們保存在'NSUserDefaults'(而不是文件系統,這可能是最好的),你可以存儲一個'NSDictionary'的URL - >映像映射。如果字典有一個URL作爲關鍵字,那麼您知道該圖片已被收藏。 –

+0

對不起,我花了很長時間纔回復。所以你說的是將URL - >圖像文件名存儲到字典中?所以基本上我會比較存儲的圖像文件與我在屏幕上加載的內容,因此比較時間更少,並且NSUserDefaults中使用的內存更少,是正確的嗎? –