macOS-UserDefault在Swift和Terminal中不同
我正在尝试使用UserDefaults从我的Swift应用程序访问系统首选项(macOS-UserDefault在Swift和Terminal中不同,swift,macos,terminal,nsuserdefaults,Swift,Macos,Terminal,Nsuserdefaults,我正在尝试使用UserDefaults从我的Swift应用程序访问系统首选项(com.apple.menuextra.clock DateFormat)。使用终端时,默认读取com.apple.menuextra.clock返回 { DateFormat = "EEE MMM d h:mm:ss a"; FlashDateSeparators = 0; IsAnalog = 0; } 但是,如果我在我的Swift应用程序中执行此操作 print(UserDefault
com.apple.menuextra.clock DateFormat
)。使用终端时,默认读取com.apple.menuextra.clock
返回
{
DateFormat = "EEE MMM d h:mm:ss a";
FlashDateSeparators = 0;
IsAnalog = 0;
}
但是,如果我在我的Swift应用程序中执行此操作
print(UserDefaults.standard.dictionary(forKey: "com.apple.menuextra.clock"))
我得到nil
如何在Swift中访问此文件?如果有帮助的话,我只查找DateFormat
,这样我就知道用户是喜欢12小时还是24小时。我试过了
DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!
然后查找它是否包含a
,但这也不起作用
提前感谢。您没有在正确的域中搜索。当您调用
字典(forKey:)
、bool(forKey:)
、整数(forKey:)
等时,您正在搜索:
- :应用程序启动时传递给应用程序的参数
- 应用程序域:您在应用程序中定义的密钥
- :系统级首选项
- 语言:由用户选择的语言决定的系统级首选项
- :应用程序定义的临时密钥。每次应用启动时都必须重新注册。如果希望它保持不变,请使用应用程序域
com.apple.menuextra.clock
不是上面层次结构中的键。它本身就是一个域(可以将其视为一个具有自己偏好的独立应用程序)。改用这个:
if let dict = UserDefaults.standard.persistentDomain(forName: "com.apple.menuextra.clock") {
print(dict)
}
对于将来遇到此问题的任何人:我通过关闭应用程序沙盒解决了此问题。
UserDefaults.standard.persistentDomain(forName:“com.apple.menuextra.clock”)
仍然返回零。任何想知道此问题答案的人。。。您将需要UserDefaults.standard.persistentDomain和沙箱来查找此问题的答案。。。您将需要UserDefaults.standard.persistentDomain和沙箱关闭