Je suis vraiment aux prises avec ABAddressBookGetPersonWithRecordID pour le moment. Je garde une pièce d'identité, puis j'essaye de la rappeler. Actuellement je fais quelque chose de simple pour tester la liaison, mais ça ne fonctionne pas.iphone addressbook - Obtenir null article dans ABAddressBookGetPersonWithRecordID
Tout d'abord, je peux lire des objets de mon carnet d'adresses simulateur iPhone en utilisant:
-(BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
NSString *contactName;
NSString *contactCompany;
NSString *contactFirst;
NSString *contactLast;
contactFirst = [(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty) stringByAppendingString:@" "];
contactLast = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
contactName = [contactFirst stringByAppendingString:contactLast];
contactCompany = (NSString *)ABRecordCopyValue(person, kABPersonOrganizationProperty);
NSNumber *recordId = [NSNumber numberWithInteger: ABRecordGetRecordID(person)];
NSLog(@"record id is %d", recordId);
NSLog(@"Person Reference: %d", person);
NSLog(@"Name: %@", contactName);
NSLog(@"Company: %@", contactCompany);
qui a le NSLog:
2010-01-26 11:52:31.396 SQL[19786:207] record id is 69283952
2010-01-26 11:52:31.397 SQL[19786:207] Person Reference: 69495792
2010-01-26 11:52:31.398 SQL[19786:207] Name: John Adams
2010-01-26 11:52:31.398 SQL[19786:207] Company: (null)
Donc, ma présomption est que tout cela fonctionne à cette fin. Le problème est l'utilisation de l''ID d'enregistrement' 69283952, pour rappeler cette information de contact. Je suis actuellement en train de le faire comme ceci:
-(UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)newindexPath {
ABAddressBookRef ab = ABAddressBookCreate();
ABPersonViewController *pvc = [[ABPersonViewController alloc] init];
ABRecordRef person = ABAddressBookGetPersonWithRecordID(ab,69283952);
NSLog(@"person - %d", person);
pvc.displayedPerson = person;
NSLog(@"pvc.displayedPerson - %d", pvc.displayedPerson);
pvc.addressBook = ab;
pvc.allowsEditing = YES;
pvc.personViewDelegate = self;
[[self navigationController] pushViewController:pvc animated:YES];
[pvc release];
qui a le NSLog
2010-01-26 11:58:19.393 SQL[19849:207] Looking Up Contact Now
2010-01-26 11:58:19.399 SQL[19849:207] person - 0
2010-01-26 11:58:19.400 SQL[19849:207] pvc.displayedPerson - 0
Et donc tout ce que je reçois est une personne nulle. Qu'est-ce que je fais mal? Je n'ai absolument aucune idée!
salutations, @norskben
intéressant, de sorte que le recordId est un nombre relativement faible (je reçois 2), et rien comme le vieux 67238032. Et là vous allez, quelle petite correction !!! merci beaucoup gerry3 – oberbaum
Oui, 69283952 était la valeur du pointeur (adresse mémoire) de votre objet NSNumber. – gerry3
hmmm .. ces pointeurs continuent de me tromper. – oberbaum