【问题标题】:Changing UserDefaults with defaults write使用默认写入更改 UserDefaults
【发布时间】:2020-12-30 14:52:53
【问题描述】:

在命令行上使用defaults write 后,我正在尝试测试对UserDefaults 的更改。

如果我写的很快:

UserDefaults.standard.set("Hello", forKey:"test")

然后在命令行中输入:

defaults read ~/Library/Containers/[app]/Data/Library/Preferences/[app].plist test

[app] 是我的应用程序,结果是正确的。

如果,无论如何,我会输入:

defaults write ~/Library/Containers/[app]/Data/Library/Preferences/[app].plist test "Goodbye"

很快:

print("Test: \(UserDefaults.standard.string(forKey: "test"))")

更改似乎被忽略了。使用 defaults read 确实会给出新值。

她错过了什么?

在装有 MacOS 10.15.6 和 XCode 11.7 的 iMac 上运行。我正在使用沙盒,位置是从 SO 问题Where is a Mac Application's NSUserDefaults Data Stored? 获得的。

【问题讨论】:

    标签: swift macos userdefaults


    【解决方案1】:

    如果您在[app].plistdefaults write 命令中进行任何更改,那么您的更改将反映在您的下一次运行中。因此,在进行更改后再次在 iOS 模拟器上运行您的应用程序。

    请注意,每次运行时您的库路径都会改变。使用以下代码行获取库路径:

    Swift 代码:

    let libraryPath = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0]
    print("Your UserDefaults are stored in this folder: \(libraryPath)/Preferences")
    

    【讨论】:

      【解决方案2】:

      这似乎是一个缓存问题。

      http://hints.macworld.com/article.php?story=20130908042828630 上有一个讨论,一个叫 jgj 的人的回复,基本上被其余讨论忽略,有这个小宝石:

      killall cfprefsd
      

      完美运行。我现在使用:

      defaults write … ; killall cfprefsd
      

      一切顺利。

      【讨论】:

        猜你喜欢
        • 2023-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-08
        • 1970-01-01
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多