无法从Keychain iOS读取值



尝试在iOS中实现/学习钥匙链的使用。我保存了一个结构的多个值在Keychain,但同时检索值它显示nil。在模拟器中测试代码只有。这是通用的keychain读取方法:

extension KeychainHelper{         
func read<T>(service: String, account: String, type: T.Type) -> T? where T : Codable {
// Read item data from keychain
guard let data = read(service: service, account: account) else {
return nil
}
// Decode JSON data to object
do {
let item = try JSONDecoder().decode(type, from: data)
return item
} catch {
assertionFailure("Fail to decode item for keychain: (error)")
return nil
}}}

KeychainHelper类的完整代码可以在这里找到完整的KeychainHelper类(可以轻松复制)当我调用API的代码工作良好显示值也

class ViewModel : ObservableObject{

//some published var like centerService

let token = response.ResponseData.AuthToken
//other var

let userDetails = Pass(authToken:token, other vars)
KeychainHelper.standard.save(userDetails,service,account)
}

但是当我试图从不同的函数中读取钥匙链时,它显示为nil。这是呼叫:

class checkStatus{
var userStatus = ViewModel()  
let userDetails = KeychainHelper.standard.read(service: userStatus.centerService, 
account:userStatus.centerAccount, Pass.self)
}

错误提示操作失败,状态为-25299。通过定义:

struct Pass:Codable{
let authToken:String
let centerID:String
let userID:String
let accessID:Int
}

此错误表示具有此标识符的项目已经存在:OSStatus codes尝试从keychain删除它。你也可以查看类似问题的其他答案

最新更新