【问题标题】:NSUserDefaults nil after setting an object for keyNSUserDefaults 在为键设置对象后为零
【发布时间】:2016-09-21 19:59:37
【问题描述】:

我遇到了一个问题,我无法从 google 或其他问题中找到帮助解决或给我与 NSUserDefaults 相关的解释

let defaults = NSUserDefaults.standardUserDefaults()
let s = defaults.objectForKey("troll")

if s == nil {
    defaults.setObject("This is important message", forKey: "troll")
    defaults.synchronize()
}

print(s as! String) // It returns nil

如果我在设置后立即尝试访问该对象,它会返回 nil!

但是,如果在我的设备上再次运行我的项目,那么:

s as! String // returns "This is important message"

我的问题是为什么它不返回字符串值而不是第一次返回 nil,但第二个项目运行时返回该字符串值。

我需要它在第一次返回字符串值。那可能吗?有人能指出我做错了什么吗?

提前致谢!

【问题讨论】:

    标签: ios swift null nsuserdefaults


    【解决方案1】:

    你会踢自己的......

    if s == nil {
    

    所以你刚才说s 是零,我明白了...

    print(s as! String) // It returns nil
    

    好吧,你期望它是什么,你刚刚说它是零! :-)

    我认为你的本意是:

    let s = defaults.objectForKey("troll")
    if s == nil {
        s = "This is important message"
        defaults.setObject(s, forKey: "troll")
        defaults.synchronize()
    }
    print(s as! String) // no longer returns nil
    

    先生,你欠我一杯啤酒。

    【讨论】:

    • 我真的要踢自己了....找到那个错误的斗争是真实的!有时您只需要其他人来查看您的代码,但是谢谢! :)))
    • 我还是不明白,如果 s == nil ,他设置的值不打印它!,如果它是 nil ,设置值后打印功能发生
    • 如果该值已经在默认值中,则 s != nil,您越过该块,并调用 print。如果该值尚未处于默认值中,则他创建该值,将其保存,然后退出该块并将其打印出来。无论哪种方式,都会调用 print(s)。另一种方法是再次读取 s,在块之后(或在块内部)的另一个 objectForKey。
    • 我明白了,我得到的关键是另一个 objectForKey,谢谢 Maury :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多