Ios 如何正确删除默认值。移除ObjectForkey(";)

Ios 如何正确删除默认值。移除ObjectForkey(";),ios,iphone,xcode,swift,Ios,Iphone,Xcode,Swift,我有以下资料: let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() let phone = defaults.objectForKey("phone") as String println(phone) defaults.remove

我有以下资料:

                let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
                let phone = defaults.objectForKey("phone") as String                   
                println(phone)       
                defaults.removeObjectForKey("phone")
                println("phone2\(phone)")

尽管尝试取消设置,但打印结果显示相同,如“5”或“6”

答案很简单。您正在打印以前分配的
电话
变量。您需要再次从
NSUserDefaults
中检索该值,以检查该值是否存在

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var phone = defaults.objectForKey("phone") as String                   
println(phone)       
defaults.removeObjectForKey("phone")
if let phone = defaults.objectForKey("phone") as? String
{
        println("phone2\(phone)")
}
else
{
        println("Value is nil")
}

您正在打印变量
phone
removeObjectForKey
不会更新变量
phone
。因此,您必须从
NSUserdefaults
获取更新后的值

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("Hello", forKey: "phone")
let phone = defaults.objectForKey("phone") as String
// This will save your value in `phone`
// Do not synchronize after removing the key, if you want 'value' for your key 'phone' after your application terminated
defaults.synchronize() 
println(phone)
defaults.removeObjectForKey("phone")

// Get the updated value,
let updatedPhone = defaults.objectForKey("phone") as String?
// This will save nil in your `phone` key, make sure that what you want
defaults.synchronize() 
println("phone2\(updatedPhone)")
就像@Lyndshey所说的,你不需要同步,因为它会定期自动发生。但如果你等不及了,你的应用程序就要退出了,你可以同步,但实际上这是性能问题


请检查,也请检查这个

我进行了搜索,并将所有内容更改为:var defaults:NSUserDefaults=NSUserDefaults.standardUserDefaults()。但是,我仍然没有得到重置。我需要将let phone也更改为var phone吗?即使设置了let默认值和var phone,它也知道什么手机仍然是everywhere@JamesShelton:以上代码不会给出该结果。如果条件不起作用(因为电话是零)。在发布之前,我在我的示例应用程序中检查了它。@JamesShelton arthankamal的答案似乎更像您在这个特定案例中所寻找的。。。我建议你也试试。一旦你设置了手机,它就不会像默认值那样改变了changes@JamesShelton你试过arthankamal的密码了吗?我不知道为什么人们会投反对票。互动表明这是一个合理的问题。是的,它会起作用。但如果您想在应用程序终止后获得该值,则需要
synchronize()
it。我确实希望在终止后获得该值。如何将synchronize()放在类之上?或者在主类之上创建一个新类。。。这样地?类syncit{let defaults:NSUserDefaults=NSUserDefaults.standardUserDefaults()defaults.synchronize()}@arthankamal您的更新答案完全违背了苹果的建议。实际上,OP应该只在应用程序中调用synchronize willTerminate,在appDelegate中。@LyndseyScott,你是对的,我也给出了引用,但现在它真正取决于James Shelton。