加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Swift中创建NSMutableDictionary?

发布时间:2020-12-14 05:02:21 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个NSMutableDictionary来使用iOS中的密钥链,但是我收到以下错误. Could not find an overload for ‘init’ that accepts the supplied arguments 这是我正在使用的代码: var keychainQuery: NSMutableDictionary = NSMutableDictionary(ob
我正在尝试创建一个NSMutableDictionary来使用iOS中的密钥链,但是我收到以下错误.

Could not find an overload for ‘init’ that accepts the supplied arguments

这是我正在使用的代码:

var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword,service,userAccount,kCFBooleanTrue,kSecMatchLimitOne],forKeys: [kSecClass,kSecAttrService,kSecAttrAccount,kSecReturnData,kSecMatchLimit])

知道是什么原因引起的吗?

完整的代码:

import UIKit
import Security

let serviceIdentifier = "MySerivice"
let userAccount = "authenticatedUser"
let accessGroup = "MySerivice"

class KeychainService: NSObject {

    class func saveToken(token: NSString) {
        self.save(serviceIdentifier,data: token)
    }

    class func loadToken() -> NSString? {
        var token = self.load(serviceIdentifier)

        return token
    }

    class func save(service: NSString,data: NSString) {
        var dataFromString: NSData = data.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: false)
        // Instantiate a new default keychain query
        var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword,dataFromString],kSecValueData])

        // Delete any existing items
        SecItemDelete(keychainQuery as CFDictionaryRef)

        // Add the new keychain item
        var status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef,nil)
    }

    class func load(service: NSString) -> NSString? {
        // Instantiate a new default keychain query
        // Tell the query to return a result
        // Limit our results to one item
        var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword,kSecMatchLimit])

        var dataTypeRef :Unmanaged<AnyObject>?

        // Search for the keychain items
        let status: OSStatus = SecItemCopyMatching(keychainQuery,&dataTypeRef)

        let opaque = dataTypeRef?.toOpaque()

        var contentsOfKeychain: NSString?

        if let op = opaque? {
            let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()

            // Convert the data retrieved from the keychain into a string
            contentsOfKeychain = NSString(data: retrievedData,encoding: NSUTF8StringEncoding)
        } else {
            println("Nothing was retrieved from the keychain. Status code (status)")
        }

        return contentsOfKeychain
    }
}

解决方法

对于您的代码,您可以使用NSDictionary:

var keychainObjects = NSArray(objects:"(kSecClassGenericPassword)",dataFromString)
    var keychainValues = NSArray(objects:"(kSecClass)","(kSecAttrService)","(kSecAttrAccount)","(kSecValueData)")
    let keychainQuery = NSDictionary(objects: keychainObjects,forKeys: keychainValues)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读