Xer*_*nox 39 nsuserdefaults ios swift
如何从NSUserDefaults删除数据?如何在Objective C中做到这一点有很多答案,但Swift怎么样?所以我尝试了这个:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
Run Code Online (Sandbox Code Playgroud)
没工作.也许我真正想要删除的不是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")
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:只是为了清除一些东西 - 保存的数据很小(甚至不接近100kb)
也许我正在保存数据而不是NSUserDefaults(我是编程新手),所以这是我如何得到它(加载):
let defaults = NSUserDefaults.standardUserDefaults()
if let savedData = defaults.objectForKey("myData") as? NSData {
myData = NSKeyedUnarchiver.unarchiveObjectWithData(savedData) as! [UserLogin]
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*odd 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)")
Run Code Online (Sandbox Code Playgroud)
返回:
键值未设置为零
关键价值可选("你好世界")
删除nil后的键值
let prefs = UserDefaults.standard
keyValue = prefs.string(forKey:"TESTKEY")
prefs.removeObject(forKey:"TESTKEY")
Run Code Online (Sandbox Code Playgroud)
sou*_*rav 14
您编写的代码可以正常工作,但NSUserDefaults会以特定的时间间隔进行同步.
如你所愿,它应该立即反映在NSUserDefaults中,所以你需要编写同步
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
defaults.synchronize()
Run Code Online (Sandbox Code Playgroud)
Avi*_*are 10
试试这个
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
Run Code Online (Sandbox Code Playgroud)
对于Swift 3
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Run Code Online (Sandbox Code Playgroud)
但这将在使用时清除NSUserDefaults.careful中的所有值.
根据最佳答案,删除 swift 3 中键的 UserDefaults,只是语法略有不同:
UserDefaults.standard.removeObject(forKey: "doesContractExist")
Run Code Online (Sandbox Code Playgroud)
小智 5
Swift 4.x 删除 UserDefaults 中的所有键
let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach
{ key in defaults.removeObject(forKey: key)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52120 次 |
| 最近记录: |