簡體   English   中英

如何在Apple Watch上存儲本地設置?

[英]How can local settings be stored on apple watch?

我知道這里列出的方法可以在Apple Watch和iOS上保存首選項。

但是,他們提到無法在Apple Watch端更改設置,並且需要WCSession才能從手表更改設置。

我正在尋找一種將偏好設置本地存儲在手表上的方法。 這些首選項僅適用於手表(因此,我不希望使用共享的首選項方案)。 同樣,該方法需要在有或沒有手機的情況下都可以使用。

我的最終目標是,一旦用戶在手表上更改了Apple Watch應用上的開關,它們便會保持其狀態。 如果應用程序關閉並重新打開,我希望保留它們的狀態。

有關如何執行此操作的任何想法? 到目前為止,我唯一的想法是將文件保存到手表本地,並在啟動時從手表中讀取文件,但我覺得必須有一種更簡單的方法。

編輯:從那以后,我意識到,即使Apple不鼓勵在手表上進行偏好設置,也完全有可能(可以像在iOS中那樣完全使用UserDefaults)。 這使我可以進行本地監視設置。 然后,如果需要在手機和手表之間傳輸設置,則手表連接性(特別是TransferUserInfo)可以完成這項工作。

UserDefaults只是一個文件支持的字典。 該文件存儲為plist,而UserDefaults本質上是建立在PropertyListSerialization之上的。 對於簡單的設置,您可以滾動自己的默認值。 手表上的文件存儲與iOS中的基本相同:

數據放置。 WatchKit擴展必須在管理數據中發揮積極作用。 WatchKit擴展的容器目錄具有與iOS應用程序容器相同的基本結構。 將用戶數據和其他關鍵信息放在“文檔”目錄中。 盡可能將文件放在Caches目錄中,以便在可用磁盤空間不足時由系統刪除它們。

let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

guard let url = urls.first else {
    return
}

// The types that can be stored in this dictionary are the same as what NSUserDefaults can do
let preferences = [ "myDefault" : true ]

if let data = try? PropertyListSerialization.data(fromPropertyList: preferences, format: .xml, options: 1) {
    do {
        try data.write(to: url.appendingPathComponent("mypreferences.plist"))
    } catch {
        print("Failed to write")
    }
}

if let input = try? Data(contentsOf: url.appendingPathComponent("mypreferences.plist")),
    let dictionary = try? PropertyListSerialization.propertyList(from: input, options: .mutableContainersAndLeaves, format: nil),
    let d = dictionary as? [String : Bool],
    let value = d["myDefault"] {
        print(value)
}

或者

要共享首選項,您可以在此處使用解決方案。

暫無
暫無

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

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