gpt4 book ai didi

ios - 如何将 plist 注册到 NSUserDefaults?

转载 作者:搜寻专家 更新时间:2023-11-01 06:23:14 25 4
gpt4 key购买 nike

我想做的是将我的初始用户默认值存储在一个 plist 中,然后在应用程序首次加载时将它们读入 NSUserDefaults。

我找到了几个 posts到目前为止,这对我有帮助,但是我似乎无法找到为什么我在展开时发现 nil 的答案。显然我遗漏了一些东西,所以我的问题是:

如何正确地将 plist 注册到 NSUserDefaults?

我已经使用我的默认设置创建了一个 plist。我想从 plist 中读取并将它们注册到 NSUserDefaults 中。

settings.plist

enter image description here

ViewController.swift

class ViewController: UIViewController {

let userDefaults = NSUserDefaults.standardUserDefaults()

override func viewDidLoad() {
super.viewDidLoad()
let prefs = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist")
let dict = NSDictionary(contentsOfFile: prefs!)

if let dictionary = dict {
println("Contents of file unwrapped: \(dictionary)") // <---------
let defaults : NSDictionary! = dictionary.valueForKey("Root") as? NSDictionary
println("defaults: \(defaults)") // <---------
userDefaults.registerDefaults(defaults as! [NSObject : AnyObject])
userDefaults.synchronize()
}

if let unwrapDict = dict {

var myValue = unwrapDict.objectForKey("Boolean Switch 1") as! Bool
println("pulled from pList \(myValue)")
}
}
}

我确定您已经注意到我正在从我的 plist 中寻找 key “Root”...

let defaults : NSDictionary! = dictionary.valueForKey("Root") as? NSDictionary

我也尝试过将其他值传递给它,例如“Boolean Switch 1”并转换为不同的类型。但我所做的一切都不会改变结果。

这是两个 println() 日志的控制台输出。

enter image description here

最佳答案

在处理这段代码一天之后,我终于能够将我的 plist 输入到 NSUserDefaults 中。我对最终结果并不满意,因为我注意到 registerDefaults 实际上没有任何事情。

所以我决定在 Code Review 上发布我的工作代码查看我的代码中是否有任何不需要的部分。事实证明 registerDefualts 确实不是必需的,这里是 Alex's 的摘录回答我的问题。

This line: userDefaults.registerDefaults(dict as! [NSObject : AnyObject]) does not actually set the information on the NSUserDefaults storage file on disk. All it does is tell NSUserDefaults the default values to be used when a key doesn't yet exist on disk.

所以说了这么多,我将发布工作代码。我应该注意,正如 nhgrif 向我指出的那样,ViewController 确实不是放置这段代码的地方,更好的地方是 application(_:didFinishLaunchingWithOptions:) 中的 appDelegate。

View Controller :

class ViewController: UIViewController {

let userDefaults = NSUserDefaults.standardUserDefaults()

override func viewDidLoad() {
super.viewDidLoad()

let prefs = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist")
let dict = NSDictionary(contentsOfFile: prefs!)
userDefaults.setObject(dict, forKey: "defaults")
userDefaults.synchronize()

// this just toggles the aBool value
if let defaults = userDefaults.valueForKey("aBool") as? NSNumber {

if defaults as NSObject == 1 {
println("inside the conditional: \(defaults)")
userDefaults.setValue(0, forKey: "aBool")
userDefaults.synchronize()
println("Setting aBool to true")
} else {
userDefaults.setValue(1, forKey: "aBool")
userDefaults.synchronize()
println("setting aBool to false")
}
}
}
}

关于ios - 如何将 plist 注册到 NSUserDefaults?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29689217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com