如何从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]
}
答案 0 :(得分:66)
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")
答案 1 :(得分:12)
您编写的代码可以正常工作,但NSUserDefaults会在特定时间间隔内同步。
如您所愿,应立即反映在NSUserDefaults中,因此您需要编写同步
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
defaults.synchronize()
答案 2 :(得分:7)
试试这个
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
for Swift 3
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
但是这将在使用时清除NSUserDefaults.careful中的所有值。
答案 3 :(得分:4)
我会寻找一个解决方案,将值设置为nil
以获取键。
UserDefaults.standard.set(nil, forKey: "key")
NSUserDefaults.standardUserDefaults().setValue(nil, forKey: "key")
注意:这是一个明确而直接的陈述,但请记住,在NSUserDefaults
中存储信息是有限制的,它绝对是不正确的存储位置大型二进制文件(例如图像) - 为此有一个Documents
文件夹。但是没有定义你编码/解码的var image: String
有多大。
答案 4 :(得分:2)
使用以下for循环:
for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
答案 5 :(得分:2)
Swift 4.x删除UserDefaults中的所有密钥
let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach
{ key in defaults.removeObject(forKey: key)
}
答案 6 :(得分:1)
根据最佳答案删除swift 3中key的UserDefaults,语法略有不同:
UserDefaults.standard.removeObject(forKey: "doesContractExist")
答案 7 :(得分:0)
更新Swift的代码: 在下面的代码行中用于删除Swift中NSUserDefaults的键值
-setImageWithURLRequest:...
答案 8 :(得分:0)
要核对所有UserDefaults
个键,您可以在Swift 3.x中使用以下代码:
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
答案 9 :(得分:0)
func remove_pref(remove_key : String){
UserDefaults.standard.removeObject(forKey: remove_key)
UserDefaults.standard.synchronize()
}