2009-07-18 5 views
2

J'utilise ABUnknownPersonViewController pour afficher une vue de contact.ABPersonSetImageData n'affiche pas l'image

J'essaie de définir une image avec:

NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]); 
ABPersonSetImageData(newPersonViewController.displayedPerson, (CFDataRef)dataRef, nil); 

Il ne fonctionne pas et je ne sais pas pourquoi. Des idées?

Répondre

5

Vous ne pouvez pas simplement convertir un objet NSData en CFDataRef; comme il est indiqué dans the docs, un CFDataRef est une « référence à un immuable objet CFData », ce qui est la même que celle d'une instance NSData:

typedef const struct __CFData *CFDataRef; 

Pour créer le CFDataRef de l'instance NSData, vous devez utiliser le CFDataCreate méthode, en passant les octets et la longueur:

NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]); 
CFDataRef dr = CFDataCreate(NULL, [dataRef bytes], [dataRef length]); 

Notez également que, puisque vous créez l'objet vous-même, vous devez également libérer, après la Core Foundation Ownership Policy; vous utilisez la fonction CFRelease pour libérer la propriété de l'objet de base Fondation:

CFRelease(dr); 

Ceci est similaire à la gestion de la mémoire dans le cacao, et une fois le conserver nombre de l'objet de base Foundation atteint zéro, il sera désallouée.

Edit:Stefan était tout à fait raison, dans son commentaire, que NSData et CFData sont également sans frais pontée sur l'iPhone avec Cocoa-Touch comme avec Cocoa, donc ma réponse initiale était erronée. Ma faute, aurait dû l'éditer avant.

+0

Merci Perspex. Bon indice. Je pensais que Cocoa-Touch serait un pont gratuit entre eux (comme dans Cocoa). Néanmoins, j'ai juste essayé de créer un CFDataRef frais par votre extrait. C'est la même chose. Étrange, je ne reçois aucune erreur de ABPersonSetImageData. – Stefan

+0

Ok, je l'ai. C'était l'image. Certains d'entre eux ne fonctionnent pas. Merci pour votre aide – Stefan

+0

Pas de soucis - content que vous l'ayez corrigé. –

Questions connexes