2010-01-26 9 views
8

Naprawdę zmagam się obecnie z ABAddressBookGetPersonWithRecordID. Zapisuję identyfikator, a następnie próbuję wywołać go ponownie. Obecnie robię coś prostego, aby przetestować połączenie, ale nie działa.Książka adresowa iPhone - pobranie pozycji zerowej w ABAddressBookGetPersonWithRecordID

pierwsze, mogę czytać obiekty z mojego symulatora iPhone książki adresowej przy użyciu:

-(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); 

który ma 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) 

Więc moje przypuszczenie jest to, że wszystkie prace na tym koniec. Problem polega na użyciu "rekordu identyfikacyjnego" 69283952, aby wywołać te dane kontaktowe z powrotem. Obecnie próbuję to zrobić tak:

-(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]; 

który ma 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 

I tak wszystko ja dostać jest zerowa osoba. Co ja robię źle? Nie mam absolutnie żadnego pojęcia!

chodzi, @norskben

Odpowiedz

7

NSNumber jest obiekt, nie jest całkowita.

Aby wstawić obiekt NSNumber do ciągu formatu (np. Dla NSLog), powinieneś użyć% @ (nie% d).

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

Podobnie, jeśli masz recordID w obiekcie NSNumber, można uzyskać wartość całkowitą korzystając integerValue:

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

interesujący, więc recordID jest stosunkowo mała liczba (i dostać 2), i nic podobnego do starego 67238032. I tam idziesz, co za drobna poprawka !!! dziękuję bardzo gerry3 – oberbaum

+0

Tak, 69283952 była wartością wskaźnika (adres pamięci) obiektu NSNumber. – gerry3

+0

hmmm ... te wskaźniki wciąż mnie oszukują. – oberbaum

Powiązane problemy