2012-12-11 32 views
5

Tôi đang cố gắng để tiết kiệm một kỷ lục như vậy:MonoTouch SecKeyChain.Add trở SecStatusCode.Param

var testRecord = new SecRecord(SecKind.GenericPassword) 
{ 
    CreationDate = DateTime.UtcNow, 
    MatchCaseInsensitive = false, 
    Service = "MyService", 
    Label = "MyService", 
    Account = "User", 
    Generic = NSData.FromString("test", NSStringEncoding.UTF8), 
}; 
SecKeyChain.Add(testRecord); 

... nhưng tôi nhận được SecStatusCode.Param trở lại khi tôi chạy nó trong mô phỏng. Theo số documentation, mã đó có nghĩa là "Thông số không hợp lệ hoặc không đầy đủ được chuyển" nhưng tôi không thấy bất kỳ điều gì thiếu hoặc bất thường mà others không hoạt động với thành công rõ ràng.

Thậm chí thêm CreationDate, vô hình, mô tả, bình luận, bể, tính ValueData đến SecRecord (một số như trong this example) đã không giúp đỡ - vẫn nhận được SecStatusCode.Param.

Có bất kỳ điều không rõ ràng nào có thể khiến mã trạng thái Param được trả lại không?

Trả lời

10

Tôi gặp nhiều khó khăn khi cố gắng sử dụng móc khóa. Cuối cùng tôi đã làm việc của tôi để lưu trữ thông tin đăng nhập người dùng trong ứng dụng. Đây là những gì tôi có:

 SecRecord existingRec = new SecRecord (SecKind.GenericPassword) { 
      Service = Keychain.USER_SERVICE, 
      Label = Keychain.USER_LABEL 
     }; 

     var record = new SecRecord (SecKind.GenericPassword) { 
      Service = Keychain.USER_SERVICE, 
      Label = Keychain.USER_LABEL, 
      Account = username, 
      ValueData = NSData.FromString (password), 
      Accessible = SecAccessible.Always 
     }; 

     SecStatusCode code = SecKeyChain.Add (record); 
     if (code == SecStatusCode.DuplicateItem) { 
      code = SecKeyChain.Remove (existingRec); 
      if (code == SecStatusCode.Success) 
       code = SecKeyChain.Add (record); 
     } 

Keychain là một lớp tĩnh có hằng số vì vậy tôi không phải nhập lại chuỗi.

Điều duy nhất khác nhau giữa bạn và của tôi là thuộc tính CreationDate/MatchCaseInsensitive và mã hóa cho NSData. Có thể thử nó mà không có những người và xem nếu nó hoạt động? Nếu có, hãy thêm lại chúng một cách riêng biệt và xem điều gì sẽ gây ra vấn đề.

+0

Sự khác biệt khác là tôi đã sử dụng Chung - như tôi đã thấy trong mẫu mà tôi sắp ngừng hoạt động - trong khi bạn đang sử dụng ValueData. Điều đó đã kết thúc là vấn đề! –

+0

vẫn gặp sự cố – Pilouk