2012-07-21 68 views
0

我正在開發一個消息應用程序(類似WhatsApp),用戶可以將文本和圖像消息發送給另一個。使用核心數據圖像填充tableView

我創建的NSManagedObject一個Message對象,子類來存儲這樣的消息的詳細信息:
SENDER_NAME,timestemp,MESSAGE_TEXT和message_image(用於圖像消息)
*的圖像的平均大小是一樣的大小從iPhone相機捲圖書館拍攝的圖像。

第一個問題是:
將圖像保存到核心數據或者將它們保存到文件系統會更好嗎?

問題是,當我在聊天視圖中滾動tableView以查看舊消息時,滾動性能在從核心數據加載圖像時變得非常糟糕。

我正在使用NSFetchedResultsController來獲取郵件,而且我一次只讀取30個郵件。我試圖通過創建MessageImage對象(也是NSManagedObject的子類)來存儲UIImage以提高性能。
A Message對象與MessageImage有一對一的關係,我這樣做是爲了當fetcher從Core Data加載30條消息時,UIImage本身不會被加載,直到請求。但仍然表現不佳...

所以第二個問題是:
我該怎麼做才能提高滾動性能?

回答

2

創建圖像的縮略圖,即它們將在滾動視圖中縮放到的確切大小。這樣你就不會讀取所有的高分辨率圖像,也不必對它們進行縮放。您可以將縮略圖與Core Data或文件系統一起存儲。我不認爲會有很大的差異。但絕對將高分辨率原件存儲在文件系統上。當用戶點擊圖像時,您可以加載它們並顯示原始的全屏。

+0

保存圖像常見哪條路徑?你有沒有任何代碼示例? – Eyal 2012-07-21 22:20:38

+0

在您應用程序的文檔文件夾中。或者可能在其中的子文件夾中。你得到文件夾的路徑是這樣的:'NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString * documentsDirectory = [paths objectAtIndex:0];' – DrummerB 2012-07-22 00:02:09

+0

與[NSHomeDirectory()stringByAppendingPathComponent:@「Documents/fileName.jpg」]之間的任何不同之處: – Eyal 2012-07-22 07:30:31

1

我想好的做法是不將圖像存儲在大於 - 比如 - 圖標大小等核心數據中。將它們存儲在文件系統中。 性能明智:您可以使用GCD在後臺加載圖像,並在加載後立即在主線程上顯示它們。 看看這裏loading images from a background thread using blocks