2011-01-31 13 views
7

EDIT:問題は解決されました。コミュニティに少し貢献するために、いくつかのヘルパーメソッドと、ブログでそれらを使用する方法を設定しました。モノタッチを使用してキーチェーンとのパスワードの保存/読み取り

シミュレータやiPadでiOS4.2の実行: 元の質問 - それはここKeyChain MT example

下さい。

私は以下のコードを使用してキーチェーンからパスワードを保存して読み込もうとしています。コードの私のインスピレーションはhttps://github.com/ldandersen/scifihifi-iphone/でしたが、動作させることができません。私は何が欠けていますか?

// 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

良いブログ投稿、非常に便利、感謝! – vlad259

+0

これは引き続き受け入れられる方法ですか? – servarevitas3

+0

投稿のリンクが壊れています – Jake

答えて

5

よりもむしろ 'これ試してください.ValueData S:SecKind.GenericPasswordどこから

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

Generic戻ったNSDataを' はSecRecordを使用するのが格納されています。

+0

動作しません。私は上記の例を変更してもまだ動作しません。 – Krumelur

+1

今すぐご利用ください!私は異なるパスワードで同じレコードを2回追加することは、古いものを上書き/更新しないことを理解しました。したがって、それはnullのままです。既存のレコードを更新するには、SecKeyChain.Update()を使用する必要があります。どうもありがとう! – Krumelur

+0

私は実際の例といくつかのヘルパーメソッドを含む私のブログへのリンクを追加しました。たぶんそれは他人を助けるかもしれない。 – Krumelur

関連する問題