gpt4 book ai didi

ios - 如何不从 ViewDidLoad 中的 NSUserDefaults 获取 nil 值

转载 作者:行者123 更新时间:2023-11-30 13:37:57 24 4
gpt4 key购买 nike

我有一种情况,当我的 viewControlerviewDidLoad 中启动时,我必须使用 NSUserDefaults.standardUserDefaults() 加载一些数据,但它不会此刻不存在。当我在同一个 viewController 中点击 send Button 时,这些数据就会被保存,并且当我再次打开这个 viewController 时,我需要这些数据。现在看起来像这样:

var orderHistory = [String:String]()    

vievDidLoad(){

let userDefault = NSUserDefaults.standardUserDefaults()
let orderHistory = userDefault.objectForKey("orderHistory")

if orderHistory == nil {
self.orderHistory = orderHistory["name":"", "surname":""] as! [String:String]
} else {
self.orderHistory = orderHistory as! [String:String]
{

}// end viewDidLoad

此时我收到一条信息,我的内存力有问题。我该如何避免这种情况?

最佳答案

正如 Leo Dabus 所说,你应该尝试使用 ?? nil 合并运算符。ObjectForKey 不提供默认值,因为它不知道它是什么类型的对象,直到您第一次设置它。如果您尝试访问它的值而不设置一次,这会导致零崩溃。

将此与“boolForKey”进行比较,您不必这样做,因为它知道您正在处理 bool 值,因此自动默认为 false。

您也不必创建 2 个 orderHistory 字典,这只会使您的代码更加困惑。

试试这个

var orderHistory = [String:String]()    

vievDidLoad(){

let userDefault = NSUserDefaults.standardUserDefaults()
orderHistory = userDefault.objectForKey("orderHistory") as? [String: String] ?? orderHistory


//than just use the 1 dictionary without the if statements or creating another one.


}// end viewDidLoad

检查保存的数据是否存在(如?[String: String])并相应地更新字典。如果不存在保存的数据,它将使用 orderHistory (?? orderHistory) 中的默认值,在您的情况下它是一个空字典。这样你就不必进行 nil 检查,一切都在那一行完成。

还尝试将 key 放入结构或全局文件中,以避免拼写错误。我看到人们并不总是这样做,这是非常糟糕的做法。例如,在你的类之上创建一个结构

struct Key {
static let orderHistory = "OrderHistory"
}

像这样使用它

 ...objectForKey(Key.orderHistory)

关于ios - 如何不从 ViewDidLoad 中的 NSUserDefaults 获取 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880173/

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