删除 Swift 中 NSUserDefaults 的键值
Delete key values for NSUserDefaults in Swift
如何从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]
}
试试这个
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
对于Swift 3
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
但这将在使用时清除 NSUserDefaults.careful 中的所有值。
您编写的代码可以正常工作,但 NSUserDefaults 会在特定时间间隔同步。
如你所愿,它应该立即反映在 NSUserDefaults 中,所以你需要编写 synchronise
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
defaults.synchronize()
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)")
Returns:
键值未设置为零
键值可选("HELLO WORLD")
删除 nil 后的键值
更新Swift3:
let prefs = UserDefaults.standard
keyValue = prefs.string(forKey:"TESTKEY")
prefs.removeObject(forKey:"TESTKEY")
我会寻求一种解决方案,将 value 设置为 nil
以获得 key.
Swift 3
UserDefaults.standard.set(nil, forKey: "key")
Swift 2.x
NSUserDefaults.standardUserDefaults().setValue(nil, forKey: "key")
注意:这是一个明确而直接的陈述,但请记住在 NSUserDefaults
中存储信息是有限制的,这绝对是 而不是 [=31] =] 存储大型二进制文件(例如图像)的正确位置 - 为此,有一个 Documents
文件夹。但是它没有定义你 encode/decode.
的 var image: String
有多大
使用以下 for 循环:
for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
删除 UserDefaults for key in swift 3,基于最佳答案,语法略有不同:
UserDefaults.standard.removeObject(forKey: "doesContractExist")
更新 Swift 的代码:
使用下面的代码行删除 Swift
中 NSUserDefaults 的键值
UserDefaults.standard.setValue(nil, forKey: "YouEnterKey")
要核对所有 UserDefaults
键,您可以在 Swift 3.x 中使用以下代码:
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Swift 4.x 删除 UserDefaults 中的所有密钥
let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach
{ key in defaults.removeObject(forKey: key)
}
func remove_pref(remove_key : String){
UserDefaults.standard.removeObject(forKey: remove_key)
UserDefaults.standard.synchronize()
}
在Swift5.0中,iOS15下面单行代码就够了。
UserDefaults.standard.dictionaryRepresentation().keys.forEach(defaults.removeObject(forKey:))
或者试试这个
if let appDomain = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: appDomain)
}
如何从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]
}
试试这个
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
对于Swift 3
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
但这将在使用时清除 NSUserDefaults.careful 中的所有值。
您编写的代码可以正常工作,但 NSUserDefaults 会在特定时间间隔同步。
如你所愿,它应该立即反映在 NSUserDefaults 中,所以你需要编写 synchronise
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
defaults.synchronize()
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)")
Returns:
键值未设置为零
键值可选("HELLO WORLD")
删除 nil 后的键值
更新Swift3:
let prefs = UserDefaults.standard
keyValue = prefs.string(forKey:"TESTKEY")
prefs.removeObject(forKey:"TESTKEY")
我会寻求一种解决方案,将 value 设置为 nil
以获得 key.
Swift 3
UserDefaults.standard.set(nil, forKey: "key")
Swift 2.x
NSUserDefaults.standardUserDefaults().setValue(nil, forKey: "key")
注意:这是一个明确而直接的陈述,但请记住在 NSUserDefaults
中存储信息是有限制的,这绝对是 而不是 [=31] =] 存储大型二进制文件(例如图像)的正确位置 - 为此,有一个 Documents
文件夹。但是它没有定义你 encode/decode.
var image: String
有多大
使用以下 for 循环:
for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
删除 UserDefaults for key in swift 3,基于最佳答案,语法略有不同:
UserDefaults.standard.removeObject(forKey: "doesContractExist")
更新 Swift 的代码: 使用下面的代码行删除 Swift
中 NSUserDefaults 的键值UserDefaults.standard.setValue(nil, forKey: "YouEnterKey")
要核对所有 UserDefaults
键,您可以在 Swift 3.x 中使用以下代码:
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Swift 4.x 删除 UserDefaults 中的所有密钥
let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach
{ key in defaults.removeObject(forKey: key)
}
func remove_pref(remove_key : String){
UserDefaults.standard.removeObject(forKey: remove_key)
UserDefaults.standard.synchronize()
}
在Swift5.0中,iOS15下面单行代码就够了。
UserDefaults.standard.dictionaryRepresentation().keys.forEach(defaults.removeObject(forKey:))
或者试试这个
if let appDomain = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: appDomain)
}