2013-09-16 2 views
1

J'utilise ABPeoplePickerNavigationController pour le tableau de représentation des contacts. En tapant sur le contact, je dois définir une nouvelle image pour cela. J'ai ajouté du code à déléguer pour changer les données d'une personne, mais je ne peux pas changer d'image. Aucune suggestion?Définir l'image pour contacter iOS

Ceci est mon code ci-dessous:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{ 
    NSData *dataRef = UIImagePNGRepresentation(self.theImage); 
    CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]); 
    CFErrorRef error; 

    ABPersonRemoveImageData(person, &error); // clean any image first from ref 
    if (ABAddressBookSave(_addressBook, &error)) 
    { 
     ABPersonSetImageData(person, cfdata, &error); 
     ABAddressBookSave(_addressBook, &error); 
    } 
    CFRelease(cfdata); 

    [self dismissViewControllerAnimated:YES completion:nil]; 

    return NO; 
} 

J'ai téléchargé échantillon d'ici: link

Pour vérifier comment cela fonctionne, vous pouvez télécharger le code et modifier ci-dessous délégué avec mon code.

Répondre

1

Vous devez enregistrer les modifications via ABAddressBookSave()

De plus, gardez à l'esprit si votre contact ne possède pas déjà une image, à la fois la vignette et l'image en taille seront ajoutés lorsque vous utilisez ABPersonSetImageData. Cependant, si votre contact a déjà une image en taille réelle, seulement la miniature sera définie lorsque vous utiliserez ABPersonSetImageData.

// this is not production level code. method call return values and errors 
// need to be handled properly 
ABPersonRemoveImageData(person, &error); // clean any image first from ref 
if (ABAddressBookSave(addressBook, &error)) 
{ 
    ABPersonSetImageData(person, cfdata, &error); 
    ABAddressBookSave(addressBook, &error) 
} 
+0

merci pour vos commentaires J'ai mis à jour ma question avec le code basé sur vos commentaires mais je ne vois toujours pas cette image apparaît dans mon contact. J'ai vérifié cfdata, personne, _addressBook tous d'entre eux ont de la valeur –

+0

j'ai ajouté un lien vers les sources d'où je l'ai téléchargé –

+1

Je pense avoir utilisé une référence de carnet d'adresses différente. Je reçois une instance de carnet d'adresses de ABPeoplePickerNavigationController et cela fonctionne bien. Merci –

Questions connexes