2009-07-18 22 views
2

Ich verwende ABUnknownPersonViewController, um eine Kontaktansicht anzuzeigen.ABPersonSetImageData zeigt kein Bild an

Ich versuche, ein Bild zu setzen mit:

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

Es funktioniert nicht, und ich weiß nicht, warum. Irgendwelche Ideen?

Antwort

5

Sie können nicht einfach ein NSData Objekt an eine CFDataRef übertragen; wie in the docs erwähnt, ein CFDataRef ist eine „Referenz auf ein unveränderliches cfdata Objekt“, das nicht das gleiche wie eine NSData Instanz ist:

typedef const struct __CFData *CFDataRef; 

Um die CFDataRef aus der NSData Instanz zu erstellen, müssen Sie die CFDataCreate verwenden Verfahren, das Bytes und Länge vorbei:

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

Beachten Sie auch, dass, da Sie das Objekt selbst zu erstellen, müssen Sie auch loslassen, nach den Core Foundation Ownership Policy; Sie verwenden die Funktion CFRelease Eigentum an der Core Foundation-Objekt freizugeben:

CFRelease(dr); 

Dies ist ähnlich wie die Speicherverwaltung in Cocoa, und sobald die Beibehaltungszähler des Objekts Core Foundation Null erreicht wird freigegeben werden.

Edit:Stefan war völlig richtig, in seinem Kommentar, dass NSData und CFData sind auch gebührenfrei auf dem iPhone mit Cocoa-Touch als mit Cocoa überbrückt, so dass meine ursprüngliche Antwort falsch war. Meine Schuld, sollte es vorher bearbeitet haben.

+0

Danke Perspx. Guter Hinweis. Ich dachte in Cocoa-Touch wäre gebührenfreie Überbrückung zwischen ihnen (wie in Cocoa). Nichtsdestotrotz habe ich gerade versucht, einen frischen CFDataRef mit deinem Snippet zu erstellen. Das ist gleich. Seltsam, ich bekomme keinen Fehler von ABPersonSetImageData zurück. – Stefan

+0

Ok, ich habe es. Es war das Bild. Einige von ihnen funktionieren nicht. Danke für Ihre Hilfe – Stefan

+0

Keine Sorge - froh, dass Sie es behoben haben. –