儲存資訊 UserDefaults

iOS 系統提供儲存資訊的方式有很多種,最為簡單的就是 UserDefaults ,像是儲存使用者的開啟次數、使用時間或是有沒有使用過了哪些功能等等,這些少量資訊就可以使用 UserDefaults 來儲存。(大量資訊就不建議使用 UserDefaults 儲存。)

實際上 UserDefaults 是屬於 Foundation Framework 的功能,但因為這個功能實在太常見又方便了,幾乎每個應用程式都會使用,所以仍然分了一節作說明。

以下是本節範例目標,設置一個輸入框來儲存一段文字,可以按下按鈕儲存及更新,以及另一個按鈕用來刪除,上方導覽列右邊的按鈕可以前往下一頁,會顯示出這個儲存的文字:

userdefaults01

首先在 Xcode 裡,新建一個 Single View Application 類型的專案,取名為 ExUserDefaults 。

因為有使用到導覽列,請依照前面介紹的導覽控制器 UINavigationController,建立一個有導覽列的應用程式。並以新增檔案的方式加入一個繼承自 UIViewController 的.swift檔案,命名為DisplayViewController

請依照之前學習過的內容,在ViewControllerviewDidLoad()方法中,設置導覽列、輸入框以及按鈕,這邊便省略這個部分,如有需要詳細內容請參考節末的完整範例程式碼。

除此之外,為了這節範例所需,會為 ViewController 建立一個屬性myUserDefaults

class ViewController: UIViewController {
    var myUserDefaults :UserDefaults!

    // 省略
}

儲存及更新資訊

在應用程式建立時,系統已經為 UserDefaults 建立了一些應用程式所需的資訊。這邊在viewDidLoad()取得資訊:

// 取得儲存的預設資料
myUserDefaults = UserDefaults.standard

接著看到按下更新按鈕執行動作的方法:

@objc func updateInfo() {
    print("update info")

    // 結束編輯 把鍵盤隱藏起來
    self.view.endEditing(true)

    myUserDefaults.set(
        myTextField.text, forKey: "info")
    myUserDefaults.synchronize()
}

要儲存資訊是使用到 UserDefaults 的方法set(_:forKey:),兩個參數分別為要儲存的資訊以及 key 值,有點像是字典鍵值對 key : value

如果尚未有這個 key 值資訊時,就會新增,如果已經有了的話,則是會更新它。

設置好新的值之後,有時系統不會即時更新儲存內容,如果你要確實讓它儲存起來時,就是使用 UserDefaults 的方法synchronize(),這可以讓資訊確實儲存。

移除資訊

接著看到按下移除按鈕執行動作的方法:

@objc func removeInfo() {
    print("remove info")

    myUserDefaults.removeObject(forKey: "info")

    myTextField.text = ""
}

移除資訊則是使用到 UserDefaults 的方法removeObject(forKey:),依照傳入的 key 值移除資訊。

存取資訊

最後看到下一頁 DisplayViewController ,其內的viewDidLoad()中,建立一個 UILabel 來顯示資訊:

if let info = myUserDefaults.object(forKey: "info") as? String {
    myLabel.text = info
} else {
    myLabel.text = "尚未儲存資訊"
    myLabel.textColor = UIColor.red
}

上述程式省略其他部分,僅說明存取資訊,使用 UserDefaults 的方法object(forKey:) 來取得資訊,因為不只可以儲存單純文字,所以這邊會將它先轉為字串( String )再作後續使用。

以上即為這節範例的內容。

範例

本節範例程式碼放在 uikit/userdefaults

results matching ""

    No results matching ""