我有一个带有settings.bundle的iPhone应用程序,可以处理我的应用程序的各种设置.我可以在root.plist文件中设置默认值(使用DefaultValue属性),但这些只在用户第一次打开设置应用程序时使用.有没有办法在您的应用程序安装时写出这些值?我知道我可以编写代码来检查我的应用程序的第一次启动,然后将它们写出来,但之后它们位于两个不同的地方.
以下是我的root.plist中的一个条目作为示例:
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Open To Top Location</string>
<key>Key</key>
<string>open_top_location</string>
<key>DefaultValue</key>
<string>YES</string>
<key>TrueValue</key>
<string>YES</string>
<key>FalseValue</key>
<string>NO</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
最终的结果应该是,如果我要求'open_to_top_location',我会得到一个YES,而不是在用户第一次打开Settings应用程序之前根本不存在.
有任何想法吗?
我在我的应用程序中添加了一个Settings包,在Xcode中它出现在我的项目树视图的根目录中.
该Root.plist文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Service</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>Hostname</string>
<key>Key</key>
<string>service_hostname</string>
<!-- and so on -->
Run Code Online (Sandbox Code Playgroud)
当我在iOS上打开"设置"应用程序时,条目显示在底部,我可以完美地显示和编辑我的设置.
但是我无法从代码中检索这些值.这是我的代码:
static func loadSettings() {
let ud = NSUserDefaults.standardUserDefaults()
ud.synchronize()
Settings.hostName = ud.stringForKey("service_hostname")
// etc
}
Run Code Online (Sandbox Code Playgroud)
我也试过ud.objectForKey和ud.valueForKey-都返回nil为好.
设置Settings.hostNameXcode调试器报告后,nil尽管我在"设置"应用中设置了显式值,但它仍具有值.
我看到了这个帖子(iPhone应用程序:如何从root.plist获取默认值?),其中有人发布了一大块Objective-C代码,手动将Root.plist文件直接加载到一个NSMutableDictionary和调用中,NSUserDefaults.standardUserDefaults().registerDefaults但这似乎是一个黑客(我可以'让它在Swift中工作,因为编译器说它stringByAppendingPathComponent不再存在了)
为什么不 …