如何从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后的键值
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中的所有值.
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后的键值
let prefs = UserDefaults.standard keyValue = prefs.string(forKey:"TESTKEY") prefs.removeObject(forKey:"TESTKEY")
您编写的代码可以正常工作,但NSUserDefaults会以特定的时间间隔进行同步.
如你所愿,它应该立即反映在NSUserDefaults中,所以你需要编写同步
let defaults = NSUserDefaults.standardUserDefaults() defaults.removeObjectForKey("myKey") defaults.synchronize()
试试这个
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
对于Swift 3
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
但这将在使用时清除NSUserDefaults.careful中的所有值.