当前位置:  开发笔记 > IOS > 正文

在Swift中删除NSUserDefaults的键值

如何解决《在Swift中删除NSUserDefaults的键值》经验,为你挑选了3个好方法。

如何从NSUserDefaults删除数据?如何在Objective C中做到这一点有很多答案,但Swift怎么样?所以我尝试了这个:

let defaults = NSUserDefaults.standardUserDefaults()
    defaults.removeObjectForKey("myKey")

没工作.也许我真正想要删除的不是NSUserDefaults?这是我保存数据的方式:

class MySavedData: NSObject, NSCoding {
    var image: String

    init(name: String, image: String) {
        self.image = image
    }

    required init(coder aDecoder: NSCoder) {
        image = aDecoder.decodeObjectForKey("image") as! String
    }

    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(image, forKey: "image")
    }
}

class ViewController: <...> {
    var myData = [MySavedData]() //Later myData gets modified and then function save() is called

    func save() {
        let savedData = NSKeyedArchiver.archivedDataWithRootObject(myData)
        let defaults = NSUserDefaults.standardUserDefaults()
        defaults.setObject(savedData, forKey: "myKey")
    }
}

编辑:只是为了清除一些东西 - 保存的数据很小(甚至不接近100kb)

也许我正在保存数据而不是NSUserDefaults(我是编程新手),所以这是我如何得到它(加载):

let defaults = NSUserDefaults.standardUserDefaults()
if let savedData = defaults.objectForKey("myData") as? NSData {
    myData = NSKeyedUnarchiver.unarchiveObjectWithData(savedData) as! [UserLogin]
    }

Peter Todd.. 72

removeObjectForKey是正确的方法.
这将删除所选键的值.以下代码为NSUserDefaults中的键设置字符串值,打印它然后使用removeObjectForKey再次删除和打印键值.在removeObjectForKey之后,值为nil.

let prefs = NSUserDefaults.standardUserDefaults()
var keyValue = prefs.stringForKey("TESTKEY")
print("Key Value not set \(keyValue)")
let strHello = "HELLO WORLD"

prefs.setObject(strHello, forKey: "TESTKEY")
keyValue = prefs.stringForKey("TESTKEY")
print("Key Value \(keyValue)")

prefs.removeObjectForKey("TESTKEY")
keyValue = prefs.stringForKey("TESTKEY")
print("Key Value after remove \(keyValue)")

返回:

键值未设置为零

关键价值可选("你好世界")

删除nil后的键值

更新Swift 3:

let prefs = UserDefaults.standard
keyValue = prefs.string(forKey:"TESTKEY")
prefs.removeObject(forKey:"TESTKEY")


小智.. 14

您编写的代码可以正常工作,但NSUserDefaults会以特定的时间间隔进行同步.

如你所愿,它应该立即反映在NSUserDefaults中,所以你需要编写同步

let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey") 
defaults.synchronize()


Avijit Nagar.. 10

试试这个

NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)

对于Swift 3

UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)

但这将在使用时清除NSUserDefaults.careful中的所有值.



1> Peter Todd..:

removeObjectForKey是正确的方法.
这将删除所选键的值.以下代码为NSUserDefaults中的键设置字符串值,打印它然后使用removeObjectForKey再次删除和打印键值.在removeObjectForKey之后,值为nil.

let prefs = NSUserDefaults.standardUserDefaults()
var keyValue = prefs.stringForKey("TESTKEY")
print("Key Value not set \(keyValue)")
let strHello = "HELLO WORLD"

prefs.setObject(strHello, forKey: "TESTKEY")
keyValue = prefs.stringForKey("TESTKEY")
print("Key Value \(keyValue)")

prefs.removeObjectForKey("TESTKEY")
keyValue = prefs.stringForKey("TESTKEY")
print("Key Value after remove \(keyValue)")

返回:

键值未设置为零

关键价值可选("你好世界")

删除nil后的键值

更新Swift 3:

let prefs = UserDefaults.standard
keyValue = prefs.string(forKey:"TESTKEY")
prefs.removeObject(forKey:"TESTKEY")



2> 小智..:

您编写的代码可以正常工作,但NSUserDefaults会以特定的时间间隔进行同步.

如你所愿,它应该立即反映在NSUserDefaults中,所以你需要编写同步

let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey") 
defaults.synchronize()



3> Avijit Nagar..:

试试这个

NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)

对于Swift 3

UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)

但这将在使用时清除NSUserDefaults.careful中的所有值.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有