2017-10-07 82 views
1

我正在製作一個應用程序,用戶可以在該應用程序中拍攝照片並添加標題和說明。但現在我需要存儲圖片和標題。我試着製作一個包含標題,描述和圖像屬性的對象。如何在Swift上本地存儲圖像和字符串

完成後,我使用UserDefaults保存包含該信息的自定義對象數組。我的想法是在另一個視圖中顯示一個表格視圖,其中包含用戶在單元格上拍攝的所有內容和圖片。我試着回覆用戶默認的信息。直到用戶保存太多圖片爲止,它工作良好。當viewController加載tableview時,我的應用程序變慢,最終崩潰。

我想問題是,當我加載所有的自定義對象的所有數組,所有的圖片都加載到內存中,儘管它們沒有被使用和顯示給用戶。所以我認爲這不是做我想做的最好的方法。

有沒有什麼辦法可以讓我更有效地製作或存儲數據,並在不使用設備的所有內存的情況下在tableview中使用它?

我從0再次製作應用程序。

你能告訴我如何有效地存儲數據和圖像?

回答

0

當存儲數據,你已經基本上2個選項 - UserDefaults或CoreData(或境界,但我不喜歡它,甚至在某些情況下,它比CoreData更好)...

第一個是推薦當沒有太多的數據要保存...對於操作更多的數據,我會使用數據庫 - CoreData ...

對於你的操作,你可以使用CoreData和NSFetchedResultsController(這是專門設計用於從數據庫)...

您可以閱讀FetchedResultsController文檔here .. 。核心數據基礎here

祝你好運!

+3

還有比UserDefaults和CoreData更多的選項。圖片可以寫成文件。數據可以以各種格式寫入文件。當然UserDefaults不應該用於存儲圖片或其他信息。 – rmaddy

+0

@rmaddy爲什麼要將這些數據保存到文件中?它只是使這個問題的事情複雜化 –

+0

咦?如何將文件寫入文件比較複雜? – rmaddy

0

在設備上永久存儲用戶數據有多種選擇,以便它可以在應用程序和手機重新啓動後繼續存在。 NSUserDefaults通常用於少量數據,例如用戶偏好。

當需要存儲大量數據,特別是像照片這樣的大型二進制對象時,您需要決定要使用哪種設計。一個選項:

  • 店內所有的照片在一個目錄在你的應用程序文件,然後使用一些簡單的查找存儲(也許核心數據,或SQLite的,甚至是一個平面文件)建立索引的照片和他們的元數據。或者,如果您不關心索引,可以從目錄中讀取文件名列表並按時間排序。

你也許有另外一個問題是,你要加載的照片所有一次爲用戶。正如你所發現的,一旦你有超過一小部分的照片,這個系統就會崩潰。您需要一些機制來一次只加載少量照片,最好只有用戶需要在那一刻顯示的照片。

因此,例如,如果您要在桌面視圖中顯示照片,則只需加載在任何給定時間在表格中可見的10-15張照片。

相關問題