我正在使用一个名为KeychainAccess的非常基本的Swift库来处理我应用中的钥匙串键的获取和设置。
我正在尝试删除首次运行应用时的所有钥匙串项目。除了删除所有项目之外,我的所有代码都没有问题。我的第一次尝试是遍历每个键并单独删除它,如下所示:
var keychain: Keychain!
if (NSUserDefaults.standardUserDefaults().objectForKey("FirstRun") == nil) {
NSUserDefaults.standardUserDefaults().setValue("1strun", forKey: "FirstRun")
NSUserDefaults.standardUserDefaults().synchronize()
//Reset the keychain by looping through all and removing
let allItems = keychain.allItems()
for item in allItems {
do {
try keychain.remove(item["key"] as! String)
} catch let error {
print("error: \(error)")
}
}
}
虽然,在尝试获取keychain.allItems()
时,我收到错误:fatal error: unexpectedly found nil while unwrapping an Optional value
所以我在Keychain.swift
文件中挖了更多,找到了一个名为removeAll()
的函数。所以我尝试使用它,就像这样:
do {
try keychain.removeAll()
} catch let error {
print("error: \(error)")
}
然而,我收到了与上述相同的错误。
我认为问题是因为我的应用的钥匙串已经空了。
答案 0 :(得分:2)
keychain
的声明之前,这是一个猜谜游戏,不过我猜错了你的声明:
var keychain: Keychain!
如果是这样,错误就是试图告诉你keychain
是零
答案 1 :(得分:0)
如果某人只是希望钥匙串删除所有内容并从零开始, 这是一种简单的方法:
let key = "somekey"
let keychain = Keychain(service: key)
let keys = keychain.allKeys()
for key in keys {
print("key: \(key)")
do {
try keychain.remove(key)
} catch let error {
print("error: \(error)")
}
}