get foto de perfil de facebook

Actualmente quiero get una foto de perfil de Facebook y luego convertir la image en CCSprite.

Hasta ahora, mi código se ve así:

//fbId is facebook id of someone NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=normal", fbId]]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *image = [UIImage imageWithData:data]; //convert UIImage to CCSprite CCTexture2D *texture = [[[CCTexture2D alloc] initWithImage:image resolutionType:kCCResolutionUnknown] retain]; CCSprite *sprite = [CCSprite spriteWithTexture:texture]; [self addChild:sprite]; 

Funciona, pero tarda unos minutos en cargarse, unos segundos.

mi pregunta es, aparte de la connection a Internet, ¿hay alguna mejor manera de cargar la image del perfil de Facebook lo más rápido posible? Gracias

Pones el código de networking en el hilo principal, lo que bloquearía la interfaz de usuario y poseería una mala experiencia de usuario. Regularmente, debes poner esas cosas en otro hilo. Trate de usar el despacho

 dispatch_queue_t downloader = dispatch_queue_create("PicDownloader", NULL); dispatch_async(downloader, ^{ NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *image = [UIImage imageWithData:data]; dispatch_async(dispatch_get_main_queue(), ^{ CCTexture2D *texture = [[[CCTexture2D alloc] initWithImage:image resolutionType:kCCResolutionUnknown] retain]; CCSprite *sprite = [CCSprite spriteWithTexture:texture]; [self addChild:sprite]; }); }); 

O si lo desea, puede probar JBAsyncImageView . Tal vez tienes que piratearlo a tu CCSprite 🙂

Por un lado, optaría por usar AFNetworking para solicitar de forma asincrónica los datos de la image. Mi conjetura es que esto es lo que está causando la demora. Es posible que note que su UI se bloquea durante esos pocos segundos. Asincrónicamente llamar a esa información lo resolverá. Aún mejor, puede considerar utilizar iOS SDK de Facebook para llamar a la image.