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
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
Tak, 69283952 była wartością wskaźnika (adres pamięci) obiektu NSNumber. – gerry3
hmmm ... te wskaźniki wciąż mnie oszukują. – oberbaum