【发布时间】:2015-08-23 12:56:02
【问题描述】:
我正在尝试存储一个整数并使用 KeyChain 检索它。
我是这样保存的:
func SaveNumberOfImagesTaken()
{
let key = "IMAGE_TAKEN"
var taken = 10
let data = NSKeyedArchiver.archivedDataWithRootObject(taken)
let query : [String:AnyObject] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrAccount as String : key,
kSecValueData as String : data
]
let status : OSStatus = SecItemAdd(query as CFDictionaryRef, nil)
}
这是我尝试检索它的方式:
func CheckIfKeyChainValueExitss() -> AnyObject? {
var key = "IMAGE_TAKEN"
let query : [String:AnyObject] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrAccount as String : key,
kSecReturnData as String : kCFBooleanTrue,
kSecMatchLimit as String : kSecMatchLimitOne ]
var dataTypeRef :Unmanaged<AnyObject>?
let status: OSStatus = SecItemCopyMatching(query, &dataTypeRef)
if let op = dataTypeRef?.toOpaque() {
let data = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()
if let string: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? AnyObject? {
if key == "IMAGE_TAKEN"
{
return string as! String!
}
else if string == nil
{
return nil
}
}
}
return nil
}
我收到以下错误:
无法将“__NSCFNumber”类型的值转换为“NSString”
我尝试使用变量但没有成功。
【问题讨论】:
-
那么我是保存错误还是检索错误?我很困惑哈哈@Paulw11
-
这个插入式钥匙串包装器可能会给你一些想法……github.com/ashleymills/Keychain.swift
-
@AshleyMills 在下面看到我的回答
标签: ios swift keychain nskeyedarchiver