2012-04-30 2 views
0

Travail sur le code de quelqu'un d'autre. Je suis vraiment confus au sujet de ce qui se passe exactement dans ce code.Définition des propriétés de personne

ABAddressBookRef addressBook = ABAddressBookCreate(); 
ABRecordRef persons = ABAddressBookGetPersonWithRecordID(addressBook, x); 
CFErrorRef *error=NULL; 
ABAddressBookRemoveRecord(addressBook, persons, error); 
ABAddressBookSave(addressBook, error); 

ABRecordRef persons = ABPersonCreate(); 

ABRecordSetValue(persons, kABPersonFirstNameProperty, firstName , nil); 

Ce qui devrait être fait est qu'une personne ABRecordRef devrait être créée. Ses propriétés doivent être définies et son enregistrement/détails doivent être affichés. Il ne devrait jamais être enregistré dans le carnet d'adresses. Est-ce le moyen de le faire. Besoin d'aide pour. Editer: En dehors de la définition des propriétés à la personne, le code suivant est ajouté pour pousser le contrôleur de vue à voir la personne.

MyContactDetailViewcontroller *personContactDetail = [[MyContactDetailViewcontroller alloc] init]; 
personContactDetail.displayedPerson = persons; 
personContactDetail.passedSelectedContactData = selectedContactsOnlyData; 
[self.navigationController pushViewController:personContactDetail animated:YES]; 
[personContactDetail release]; 

MyContactDetailViewcontroller sous-classe ABPersonViewController. Ou est-il plus susceptible d'utiliser ABUnknownPersonViewController.

Trouvez-vous des cas où les contacts pourraient être dupliqués dans le carnet d'adresses

Répondre

1

Ceci est exactement ce qui se passe ici .. Je vais vous expliquer ..

ABAddressBookCreate crée un nouveau carnet d'adresses à partir des données de la base de données du carnet d'adresses, de sorte que toutes les modifications que vous apportez à ABAddressBookRef ne seront enregistrées dans la base de données du carnet d'adresses réelle une fois que vous appelez ABAddressBookSave(). Donc, ce qu'il fait est d'obtenir la référence pour la personne avec enregistrement - x. Que vous créez une nouvelle entrée de personne utilisant

ABRecordRef persons = ABPersonCreate(); 

et que vous définissez sa valeur, mais il est disponible à cet objet particulier et ne sont pas stockées dans la base de données à moins que vous appelez ... ABAddressBookSave()

espoir cela vous aide ... :)

+0

Lorsque ABAddressBookSave() est appelée, la personne est en fait enregistrée dans le carnet d'adresses et toute modification de ses propriétés sera également reflétée dans le carnet d'adresses. Est-ce vrai? –

+0

ABAddressBookSave() n'est pas appelé après la création de la personne, donc NON. Si vous appelez ABAddressBookSave() à nouveau à YES (seulement les modifications que vous avez apportées jusqu'à ce point). –

+0

'ABAddressBookSave (adresse, erreur);'. Que fait ce morceau de code. Permet-il de sauver une personne sans aucune propriété? –

Questions connexes