SecItemCopyMatching
là cuộc gọi phù hợp cho điều đó. Đầu tiên chúng ta xây dựng từ điển truy vấn của chúng tôi để các thuộc tính của các mặt hàng được trả về trong từ điển, và rằng tất cả các mặt hàng được trả về:
NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kCFBooleanTrue, (__bridge id)kSecReturnAttributes,
(__bridge id)kSecMatchLimitAll, (__bridge id)kSecMatchLimit,
nil];
Như SecItemCopyMatching
đòi hỏi ít nhất lớp của trở SecItem
s, chúng ta tạo ra một mảng với tất cả các lớp học…
NSArray *secItemClasses = [NSArray arrayWithObjects:
(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecClassInternetPassword,
(__bridge id)kSecClassCertificate,
(__bridge id)kSecClassKey,
(__bridge id)kSecClassIdentity,
nil];
... và cho mỗi lớp, hãy đặt lớp trong truy vấn của chúng tôi, gọi và đăng nhập kết quả.
for (id secItemClass in secItemClasses) {
[query setObject:secItemClass forKey:(__bridge id)kSecClass];
CFTypeRef result = NULL;
SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
NSLog(@"%@", (__bridge id)result);
if (result != NULL) CFRelease(result);
}
Trong mã sản xuất, bạn nên kiểm tra xem OSStatus
trả về bởi SecItemCopyMatching
là một trong hai errSecItemNotFound
(không có mục nào được tìm thấy) hoặc errSecSuccess
(ít nhất một mục đã được tìm thấy).
Nguồn
2012-07-26 15:37:15
Cảm ơn! Chưa thử nghiệm, nhưng trông giống như câu trả lời đúng. – noamtm
Đó là. Tôi đã thử nghiệm nó :) –
Tôi nhận được tất cả null trong in ra cả trong iPhone và giả lập. Tôi có nên làm gì nữa không? – karim