如何在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中的密钥链,但是我收到以下错误.
这是我正在使用的代码: 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |