Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我正在尝试存储一个Integer并使用KeyChain检索它. 这就是我保存它的方式: func SaveNumberOfImagesTaken() { let key = "IMAGE_TAKEN" var taken = 10 let data = NSKeyedArchiver.archivedDataWithRootObject(ta 我正在尝试存储一个Integer并使用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,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}

我收到以下错误:

Could not cast value of type ‘__NSCFNumber’ to ‘Nsstring’

我试过玩变量但没有成功.

解决方法 我更新了Eric的Swift 3版本:
class KeyChain {    class func save(key: String,data: Data) -> Osstatus {        let query = [            kSecclass as String       : kSecclassGenericPassword as String,kSecValueData as String   : data ] as [String : Any]        SecItemDelete(query as CFDictionary)        return SecItemAdd(query as CFDictionary,nil)    }    class func load(key: String) -> Data? {        let query = [            kSecclass as String       : kSecclassGenericPassword,kSecMatchlimit as String  : kSecMatchlimitOne ] as [String : Any]        var dataTypeRef: AnyObject? = nil        let status: Osstatus = SecItemcopyMatching(query as CFDictionary,&dataTypeRef)        if status == noErr {            return dataTypeRef as! Data?        } else {            return nil        }    }    class func createUniqueID() -> String {        let uuID: CFUUID = CFUUIDCreate(nil)        let cfStr: CFString = CFUUIDCreateString(nil,uuID)        let swiftString: String = cfStr as String        return swiftString    }}extension Data {    init<T>(from value: T) {        var value = value        self.init(buffer: UnsafeBufferPointer(start: &value,count: 1))    }    func to<T>(type: T.Type) -> T {        return self.withUnsafeBytes { 
let int: Int = 555    let data = Data(from: int)    let status = KeyChain.save(key: "MyNumber",data: data)    print("status: ",status)    if let receivedData = KeyChain.load(key: "MyNumber") {        let result = receivedData.to(type: Int.self)        print("result: ",result)    }
.pointee } }}

用法示例:

[+++] 总结

以上是内存溢出为你收集整理的ios – 通过KeyChain保存并检索值全部内容,希望文章能够帮你解决ios – 通过KeyChain保存并检索值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
ios – 通过KeyChain保存并检索值_app_内存溢出

ios – 通过KeyChain保存并检索值

ios – 通过KeyChain保存并检索值,第1张

概述我正在尝试存储一个Integer并使用KeyChain检索它. 这就是我保存它的方式: func SaveNumberOfImagesTaken() { let key = "IMAGE_TAKEN" var taken = 10 let data = NSKeyedArchiver.archivedDataWithRootObject(ta 我正在尝试存储一个Integer并使用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,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}

我收到以下错误:

Could not cast value of type ‘__NSCFNumber’ to ‘Nsstring’

我试过玩变量但没有成功.

解决方法 我更新了Eric的Swift 3版本:
class KeyChain {    class func save(key: String,data: Data) -> Osstatus {        let query = [            kSecclass as String       : kSecclassGenericPassword as String,kSecValueData as String   : data ] as [String : Any]        SecItemDelete(query as CFDictionary)        return SecItemAdd(query as CFDictionary,nil)    }    class func load(key: String) -> Data? {        let query = [            kSecclass as String       : kSecclassGenericPassword,kSecMatchlimit as String  : kSecMatchlimitOne ] as [String : Any]        var dataTypeRef: AnyObject? = nil        let status: Osstatus = SecItemcopyMatching(query as CFDictionary,&dataTypeRef)        if status == noErr {            return dataTypeRef as! Data?        } else {            return nil        }    }    class func createUniqueID() -> String {        let uuID: CFUUID = CFUUIDCreate(nil)        let cfStr: CFString = CFUUIDCreateString(nil,uuID)        let swiftString: String = cfStr as String        return swiftString    }}extension Data {    init<T>(from value: T) {        var value = value        self.init(buffer: UnsafeBufferPointer(start: &value,count: 1))    }    func to<T>(type: T.Type) -> T {        return self.withUnsafeBytes { 
let int: Int = 555    let data = Data(from: int)    let status = KeyChain.save(key: "MyNumber",data: data)    print("status: ",status)    if let receivedData = KeyChain.load(key: "MyNumber") {        let result = receivedData.to(type: Int.self)        print("result: ",result)    }
.pointee } }}

用法示例:

总结

以上是内存溢出为你收集整理的ios – 通过KeyChain保存并检索值全部内容,希望文章能够帮你解决ios – 通过KeyChain保存并检索值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1102946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存