Xcode 6.1中,“CFStringRef”类型不符合“Hashable”协议

5

在我的应用程序中,我有一个钥匙串访问类,它在Xcode 6中工作正常,但现在在Xcode 6.1中出现了一些错误,第一个错误是:类型“CFStringRef”不符合协议“Hashable”:

private class func updateData(value: NSData, forKey keyName: String) -> Bool {
    let keychainQueryDictionary: NSMutableDictionary = self.setupKeychainQueryDictionaryForKey(keyName)

    let updateDictionary = [kSecValueData:value] //HERE IS THE ERROR

    // Update
    let status: OSStatus = SecItemUpdate(keychainQueryDictionary, updateDictionary)

    if status == errSecSuccess {
        return true
    } else {
        return false
    }
}

我还遇到了一个类似于第一个错误的错误,但是它是:类型 'CFStringRef' 不符合协议 'NSCopying',以下是我遇到这个错误的部分代码:
private class func setupKeychainQueryDictionaryForKey(keyName: String) -> NSMutableDictionary {
    // Setup dictionary to access keychain and specify we are using a generic password (rather than a certificate, internet password, etc)

    var keychainQueryDictionary: NSMutableDictionary = [kSecClass:kSecClassGenericPassword] 

    // HERE IS THE ERROR ↑↑↑

    // Uniquely identify this keychain accessor
    keychainQueryDictionary[kSecAttrService as String] = KeychainWrapper.serviceName

    // Uniquely identify the account who will be accessing the keychain
    var encodedIdentifier: NSData? = keyName.dataUsingEncoding(NSUTF8StringEncoding)

    keychainQueryDictionary[kSecAttrGeneric as String] = encodedIdentifier
    keychainQueryDictionary[kSecAttrAccount as String] = encodedIdentifier

    return keychainQueryDictionary
}

请问有人可以告诉我如何解决这些错误吗?

2个回答

8

CFStringRefNSString 相关联,而 NSString 又与 String 相关联。最简单的解决方法是将 kSecValueDatakSecClass 强制转换为 StringNSString

这里:

let updateDictionary = [kSecValueData as String: value]

并且在这里:

var keychainQueryDictionary: NSMutableDictionary = [kSecClass as NSString: kSecClassGenericPassword]

4

我认为这样会更易读

let keychainQueryDictionary : [String: AnyObject] = [
  kSecClass       : kSecClassGenericPassword,
  kSecAttrService : serviceIdentifier,
  kSecAttrAccount : accountName
]    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接