2011-03-24 14 views
5

Simplemente: ¿cómo obtengo la imagen de la cuenta del usuario?Obtener imagen de cuenta de usuario

Estoy usando Cocoa en Mac.

+0

¿Qué idioma usas? –

+0

@Radek Pro-Grammer: "Cocoa" significa que está usando Objective-C. –

+2

@Dave DeLong: eso es falso para al menos el 100%. Los enlaces de Ruby y Python están disponibles, y Assembly también es una opción. –

Respuesta

7

Libreta de direcciones método no funciona si el usuario elimina la vcard.

uso el CBIdentity método que nunca se rompe, como Dave dice:

+ (NSImage *)userImage 
{ 
    CBIdentity *identity = [CBIdentity identityWithName:NSUserName() authority:[CBIdentityAuthority defaultIdentityAuthority]]; 
    return [identity image]; 
} 

Para utilizar CBIdentity es necesario agregar el Marco Colaboración a sus objetivos y utilizar la siguiente directiva include

#import <Collaboration/Collaboration.h> 
+1

cuando uso esto, obtengo un nulo para '[identity image]', pero mi imagen es un cupcake en Preferencias del sistema:/ –

+0

¿Hay alguna manera de recibir notificaciones si la imagen cambia? – uchuugaka

3

Si puede obtener un identificador para un CSIdentityRef o una CBIdentity* que representa al usuario de que se trate, a continuación, puede invocar el método -[CBIdentity image] para recuperar su imagen cuenta.

Editar:

He aquí una respuesta anterior de la mina que muestra cómo consultar para todas las cuentas de usuario estándar en un sistema y convertirlos en CBIdentity objetos: Get all Users on OS X

Si no desea vincular en contra Collaboration.framework, luego puede usar algo como CSIdentityImageGetData (o una de las variantes similares) para obtener la imagen directamente. Personalmente, considero que trabajar con un objeto nativo de Cocoa es más agradable, pero en este caso no es absolutamente necesario.

+0

Lo siento, pero habiendo investigado esto un poco, todavía no estoy seguro de cómo codificar esto? –

+0

@magikseb, respuesta editada –

+0

¿Hay alguna forma de recibir notificaciones si la imagen cambia? La devolución de llamada de consulta de CSIdentity no parece notar cambios en la imagen – uchuugaka

4

Si desea sólo una imagen para el usuario que ha iniciado sesión en, también es posible conseguirlo con una sola línea utilizando la libreta de direcciones:

NSData *imgData = [[[ABAddressBook sharedAddressBook] me] imageData]; 

pero creo que esto no es garantizada estar lo mismo que la imagen de inicio de sesión.

+0

Sí, realmente quiero la imagen de la cuenta de usuario (imagen de inicio de sesión), no solo la imagen de perfil de la libreta de direcciones del usuario, si es posible. Gracias de todos modos –

+0

@magikseb ¡Entonces espero que el método de Dave sea el camino a seguir, y es por eso que lo voté! :) –

+0

+1 pasar por la libreta de direcciones es una idea muy interesante. No sé si es lo que quiere el OP, pero es un gran lugar para buscar información. –

Cuestiones relacionadas