2011-01-31 6 views
7

EDITAR: Se ha resuelto el problema. Para contribuir un poco a la comunidad, configuro algunos métodos de ayuda y un ejemplo de cómo usarlos en mi blog. Encuentra aquí KeyChain MT exampleAlmacenar y leer la contraseña a/desde el llavero usando Monotouch

- pregunta original:

Correr iOS4.2 el simulador y el IPAD.

Estoy tratando de almacenar y leer una contraseña del llavero usando el siguiente código. Mi inspiración para el código era https://github.com/ldandersen/scifihifi-iphone/ pero no puedo hacer que funcione. ¿Qué me estoy perdiendo?

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

Buena publicación en el blog, muy útil, gracias! – vlad259

+0

¿Sigue siendo este el método aceptado? – servarevitas3

+0

Tu enlace en tu publicación está roto – Jake

Respuesta

5

En lugar de utilizar SecRecord 's .ValueData probar esto:

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

Generic vuelve NSData desde donde se almacenan SecKind.GenericPassword' s.

+0

No funciona. He cambiado el ejemplo anterior y todavía no funciona. – Krumelur

+1

¡Funciona ahora! Descubrí que agregar el mismo registro dos veces con diferentes contraseñas no sobrescribe/actualiza el anterior. Por lo tanto, permaneció nulo. Uno tiene que usar SecKeyChain.Update() para actualizar los registros existentes. ¡Muchas gracias! – Krumelur

+0

Agregué un enlace a mi blog que contiene un ejemplo de trabajo y algunos métodos de ayuda. Tal vez ayuda a otros. – Krumelur

Cuestiones relacionadas