2012-06-15 6 views
5

Tôi muốn lưu hai mật khẩu (một chốt ứng dụng và một chốt phụ trợ) vào móc khóa của mình và tôi tự hỏi làm thế nào điều này sẽ hoạt động.
Tôi đang sử dụng KeychainItemWrapper với các số nhận dạng khác nhau.iOS lưu nhiều mật khẩu trong keychain

KeychainItemWrapper *kcw1 = [[KeychainItemWrapper alloc] initWithIdentifier:id1 accessGroup:nil]; 
KeychainItemWrapper *kcw2 = [[KeychainItemWrapper alloc] initWithIdentifier:id2 accessGroup:nil]; 

và tôi đang sử dụng một trong hai để lưu và thử lại ứng dụng hoặc chốt phụ trợ.

tôi sử dụng:

[self.kcw1 setObject:aVerifyCode forKey:(__bridge id) kSecValueData] 
[self.kcw2 setObject:aAppPin forKey:(__bridge id) kSecValueData] 

Nhưng nó không hoạt động - kết quả là -25.299 - Các mục quy định đã tồn tại trong keychain

Vì vậy, làm thế nào tôi có thể tiết kiệm nhiều mật khẩu trong keychain của tôi?

+0

'[[KeychainItemWrapper alloc] id1 accessGroup: nil];' <== làm thế nào để biên dịch này? –

+0

Xin lỗi, đăng lãng phí không được thực hiện bằng cách sao chép và dán nhưng ra khỏi tâm trí của tôi! Tôi đã chỉnh sửa ... – Alexander

Trả lời

8

OK Tôi nghĩ mình biết vấn đề là gì! KeychainItemWrapper sử dụng số nhận dạng cho kSecAttrGeneric.
Nhưng đây không phải là cách phân biệt các mục nhập. Nếu bạn muốn tiết kiệm hai tài khoản hoặc hai mật khẩu trong

kSecValueData

này sẽ dẫn đến một arror (-25.299) cho entires trùng lặp.
Lý do là, rằng api táo keychain sử dụng

kSecAttrAccount

kSecAttrService

để phân biệt mục.
Vì vậy, bạn có thể sửa đổi keychainItemWraper nếu bạn muốn được hiển thị trong số này thread

+1

Tôi đã tìm thấy KeychainItemWrapper có nhiều lỗ nhỏ như thế này. Sau khi sử dụng nó và sửa đổi nó cho nhiều dự án, tôi đã tạo ra một trình bao bọc đơn giản hơn nhiều khi truy cập vào Keychain https://github.com/reidmain/FDKeychain –