![](/img/trans.png)
[英]How to continue video capture when app goes background then comes in foreground?
[英]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觸摸類還包括對自動狀態恢復的支持,但這比我有時間在這里介紹。
我建議使用核心數據來保持數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.