我想在我的iOS應用程序中支持多個帳戶,並使用KeyChain存儲憑據。我使用相同的類(kSecClassGenericPassword)和屬性(kSecAttrService)存儲帳戶,但使用不同的用戶名(kSecAttrAccount)。這工作正常,我可以用不同的用戶名登錄。如何從Swift中的SecItemCopyMatching返回多個匹配
我現在想要檢索這些用戶名,這是我遇到問題的地方。 我定義和執行我的查詢爲:
let objects = [kSecClassGenericPassword, "foo", kCFBooleanTrue,kSecMatchLimitAll]
let keys = [kSecClass,kSecAttrService kSecReturnAttributes,kSecMatchLimit]
let query = NSDictionary(objects: objects, forKeys: keys)
var dataTypeRef : Unmanaged<AnyObject>?
let status = SecItemCopyMatching(query, &dataTypeRef)
但是隻返回一個項目。我的dataTypeRef是CFDictionary而我期望它是一個CFArray。
按照Apple Docs on SecItemCopyMatching
默認情況下,這個函數返回只有第一個找到匹配。要一次獲取多個匹配項目,請指定搜索關鍵字kSecMatchLimit,該值大於1.結果將是類型爲CFArrayRef的對象,其中包含最多匹配項目數。
正如你可以從我的代碼中看到的,我已經完成了這個,但沒有運氣。
任何人都可以指向正確的方向嗎?
請勿使用'NSDictionary(object:keys:)'。只需使用[[kSecClass:kSecClassGenericPassword,kSecAttrServer:「foo」,...]' – jtbandes 2014-10-22 00:47:07