2010-01-26 3 views
8

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

Répondre

7

NSNumber est un objet, et non pas un nombre entier.

Pour insérer un objet NSNumber dans une chaîne de format (par exemple pour NSLog), vous devez utiliser% @ (pas% d).

NSNumber *recordId = [NSNumber numberWithInteger:ABRecordGetRecordID(person)]; 
NSLog(@"record id is %@",recordId); 

De même, si vous avez RECORDID dans un objet NSNumber, vous pouvez obtenir la valeur entière en utilisant integerValue:

ABRecordRef person = ABAddressBookGetPersonWithRecordID(ab,recordId.integerValue); 
+0

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

+0

Oui, 69283952 était la valeur du pointeur (adresse mémoire) de votre objet NSNumber. – gerry3

+0

hmmm .. ces pointeurs continuent de me tromper. – oberbaum

Questions connexes