簡體   English   中英

當iphone應用程序進入后台或前台狀態時,如何保存數據?

[英]How do you save data when the iphone app goes to background or foreground state?

我有一個用戶輸入某些信息的應用程序。 每次用戶想要時,他都會在表格列表中添加新項目。 用戶完成后,他們單擊完成按鈕以完成列表,他們可以啟動另一個列表。

AppDelegate.swift文件中,我看到了一些預先存在的函數。 applicationDidEnterBackground表示在應用程序進入后台之前保存信息(我假設是在用戶使用應用程序時按下主頁按鈕...)。

在我的應用程序中,每次用戶將項目添加到列表中,然后進入主屏幕並鎖定手機,一段時間后項目消失。 所以他們添加的信息不會保存。 我想在每次應用程序最小化或最大化時使用AppDelegate.swift的函數來保存信息和加載信息。 我的問題是,保存這些信息的最佳方法是什么? 我只是寫一個文件並從文件中讀取,還是有辦法自動保存和加載這些信息? 我已經閱讀了有關將對象保存到.plist但我不一定知道它是如何工作的,因為當我單擊info.plist它只需要我設置表而沒有代碼。

提前感謝您的幫助!

免責聲明:我是一位經驗豐富的Objective-C開發人員,但對Swift來說還是一個新手。 我的答案將以Objective-C為導向。

你有很多選擇。 另一張海報建議使用Core Data,但除非你有復雜的信息需要保存,否則這可能有些過分。 核心數據是一個龐大而復雜的框架,具有陡峭的學習曲線。 它非常強大,但是在你能夠流暢地使用它之前,我希望能花一到兩周的緊張學習。

最簡單,最干凈的方法通常是使用NSUserDefaults 它是一個Cocoa類,可以讀取/寫入應用程序沙箱中系統維護文件的鍵/值對。 (基本上是一個自動讀/寫到系統文件的字典。)你不需要知道它是如何工作的細節 - 它只是起作用。 有關更多信息,請參閱NSUserDefaults上的Xcode文檔。

另一種選擇確實是使用屬性列表。 像NSArray和NSDictionary這樣的Cocoa容器對象包括在屬性列表中保存和讀取自身的方法。 尋找像writeToFile:atomically:這樣的方法writeToFile:atomically:

要保存到NSUserDefaults和屬性列表,您保存的對象及其包含的任何對象(如果它是容器對象)必須是“屬性列表”對象(字典,數組,字符串,數字(整數和浮點數),日期,二進制數據和布爾值。)在“屬性列表類型和對象”的Xcode文檔中搜索有關屬性列表和支持的數據類型的更多信息。

第三種選擇是在要保存的所有對象(整個“對象圖”)中實現NSCoding協議,然后使用NSKeyedArchiver方法archiveRootObject:toFile:將根對象(通常是容器對象)保存到磁盤archiveRootObject:toFile:

使用所有這些選項,您可以實現app delegate方法applicationDidEnterBackground ,並在調用時保存狀態數據。 然后,您將在applicationDidFinishLaunching方法中重新加載數據。 (當您返回到前台時,您不需要加載已保存的狀態數據,因為如果您返回到前台,您的應用程序仍在運行,並且狀態數據仍在內存中。)

各種Cocoa觸摸類還包括對自動狀態恢復的支持,但這比我有時間在這里介紹。

我建議使用核心數據來保持數據

請通過ray wenderlich教程獲取核心數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM