2011-01-31 26 views
7

EDIT: Sự cố đã được giải quyết. Để đóng góp một chút cho cộng đồng, tôi thiết lập một số phương thức trợ giúp và một ví dụ về cách sử dụng chúng trên blog của tôi. Tìm nó ở đây KeyChain MT exampleLưu trữ và đọc mật khẩu đến/từ keychain bằng Monotouch

- gốc câu hỏi:

Chạy iOS4.2 trên Simulator và iPad.

Tôi đang cố gắng lưu trữ và đọc mật khẩu từ móc khóa bằng cách sử dụng mã bên dưới. Cảm hứng của tôi cho mã là https://github.com/ldandersen/scifihifi-iphone/ nhưng tôi không thể làm cho nó hoạt động. Tôi đang thiếu gì?

// Create a record. 
SecRecord o = new SecRecord (SecKind.GenericPassword); 
o.Service = "myService"; 
o.Label = "myService"; 
o.Account = "[email protected]"; 
// The super secret password. 
o.Generic = NSData.FromString ("secret!", NSStringEncoding.UTF8); 
// Add to keychain. 
SecKeyChain.Add (o); 

// Now cerate another recored to query what we just saved. 
o = new SecRecord (SecKind.GenericPassword); 
o.Service = "myService"; 
o.Account = "[email protected]"; 

// Query as record.   
SecStatusCode code; 
var data = SecKeyChain.QueryAsRecord (o, out code); 

// This will tell us "all good!"... 
Console.WriteLine (code); 

// But data.Generic is NULL and this line will crash. :-(
Console.WriteLine (NSString.FromData (data.Generic, NSStringEncoding.UTF8)); 
+0

Bài đăng trên blog tốt, rất hữu ích, cảm ơn! – vlad259

+0

Đây có phải là phương pháp được chấp nhận không? – servarevitas3

+0

Liên kết của bạn trong bài đăng của bạn bị hỏng – Jake

Trả lời

5

Thay vì sử dụng SecRecord 's .ValueData thử điều này:

Console.WriteLine(NSString.FromData(data.Generic, NSStringEncoding.ASCIIStringEncoding)); 

Generic lợi nhuận NSData từ nơi SecKind.GenericPassword' s được lưu trữ.

+0

Không hoạt động. Tôi đã thay đổi ví dụ trên và vẫn không hoạt động. – Krumelur

+1

Hoạt động ngay bây giờ! Tôi đã tìm ra rằng việc thêm cùng một bản ghi hai lần với các mật khẩu khác nhau sẽ không ghi đè lên/cập nhật mật khẩu cũ. Do đó nó vẫn không có giá trị. Người ta phải sử dụng SecKeyChain.Update() để cập nhật các bản ghi hiện có. Cảm ơn rất nhiều! – Krumelur

+0

Tôi đã thêm một liên kết vào blog của tôi, trong đó có một ví dụ làm việc và một số phương pháp trợ giúp. Có lẽ nó giúp người khác. – Krumelur

Các vấn đề liên quan