我创建了一个包含设置包的应用,可以更改应用配置。从设置包中读取已完成。我正在使用下面的代码。
let defs: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defs.synchronize()
var settingsBundle: NSString = NSBundle.mainBundle().pathForResource("Settings", ofType: "bundle")!
if(settingsBundle.containsString("")){
NSLog("Could not find Settings.bundle");
return;
}
var settings: NSDictionary = NSDictionary(contentsOfFile: settingsBundle.stringByAppendingPathComponent("Root.plist"))!
var preferences: NSArray = settings.objectForKey("PreferenceSpecifiers") as! NSArray
var defaultsToRegister: NSMutableDictionary = NSMutableDictionary(capacity: preferences.count)
for prefSpecification in preferences {
if (prefSpecification.objectForKey("Key") != nil) {
let key: NSString = prefSpecification.objectForKey("Key")! as! NSString
if !key.containsString("") {
let currentObject: AnyObject? = defs.objectForKey(key as! String)
if currentObject == nil {
// not readable: set value from Settings.bundle
let objectToSet: AnyObject? = prefSpecification.objectForKey("DefaultValue")
var objectKey : String = key as! String
var finalObject : String = objectToSet as! String
defaultsToRegister.setObject(finalObject, forKey: objectKey)
}else{
//already readable: don't touch
var objectKey : String = key as! String
var finalObject : String = currentObject as! String
defaultsToRegister.setObject(finalObject, forKey: objectKey)
}
}
}
}
defs.registerDefaults(defaultsToRegister as [NSObject : AnyObject])
defs.synchronize()
相同的设置可以更新应用程序本身。但是如何将更新的值写入Settings包中?
在此link中,接受的答案表明可以使用NSUserDefaults
。但我不能,有些人能帮忙吗?
修改 请在下方查看更多信息:
{
PreferenceSpecifiers = (
{
Title = Group;
Type = PSGroupSpecifier;
},
{
DefaultValue = Test1;
Key = "multi_values";
Title = "Multiple Values";
Titles = (
FIrst,
Second,
Third
);
Type = PSMultiValueSpecifier;
Values = (
FirstValue,
SecondValue,
ThirdValue
);
}
);
StringsTable = Root;
}
我正在使用上述格式的设置包,我可以在应用中阅读它。但是,如何根据我在应用程序中进行更改来更新此多值选择?我使用以下代码更新标题值。
var settings: NSDictionary = NSDictionary(contentsOfFile: settingsBundle.stringByAppendingPathComponent("Root.plist"))!
var preferences: NSArray = settings.objectForKey("PreferenceSpecifiers") as! NSArray
preferences.objectAtIndex(1).setValue("MutipleValue is updated", forKey: "Title")
settings.setValue(preferences, forKey: "PreferenceSpecifiers")
settings.writeToFile(settingsBundle.stringByAppendingPathComponent("Root.plist"), atomically: false)
答案 0 :(得分:4)
您提供的link已回答您的问题
请注意,您不应直接从设置包中读取内容 毫无意义。您应始终使用获取和设置用户默认值 NSUserDefaults的即可。当用户更改设置时 应用程序,NSUserDefaults将自动反映这一点。他们会的 永远保持同步。
在settings.bundle
中创建新项目时,应将其设置为identifier
。
之后,您可以通过以下方式获得NSUserDefaults
所需的值:
if let export_enabled = NSUserDefaults.standardUserDefaults().valueForKey("export_enabled") as? Bool
{
if let export_interval = NSUserDefaults.standardUserDefaults().valueForKey("export_interval") as? Number
{
// ...
}
}
并改变:
NSUserDefaults.standardUserDefaults().setValue(true, forKey: "export_enabled")
<强>更新强>
设备上的iOS应用程序具有以下结构:
AppTitle.app
AppTitle
AppTitleIcon.png
Info.plist
com.company.apptitle.plist (read/write)
settings.bundle (readonly)
Settings.bundle
用于在默认Settings.app
中形成配置层次结构。它包含部分和设置类型的标题,但设置值存储在com.company.apptitle.plist
。
由于settings.bundle
是只读的,因此您无法更改其结构或节标题。您只能更改设置值,并且com.company.apptitle.plist
通过NSUserDefaults
发生此更改。