Aktualizacja 9/2/10: Ten kod nie działa już od aktualizacji do systemu iOS 4 - kończy się niepowodzeniem z wewnętrzną asercją. Istnieje teraz doskonały przykład interfejsu API Książki adresowej dostępnego w bibliotece referencyjnej iPhone SDK o nazwie "QuickContacts".Jak poprawnie używać ABPersonViewController z ABPeoplePickerNavigationController, aby wyświetlić informacje kontaktowe?
Tutaj dostępny jest przykładowy kod; to pomoże Ci rozwiązać ten problem: http://developer.apple.com/iphone/library/samplecode/QuickContacts/Introduction/Intro.html
Ja próbuje dodać funkcję do mojej aplikacji, która pozwala użytkownikowi wybrać kontakt z ABPeoplePickerNavigationController, który następnie wyświetla ABPersonViewController odpowiadający do kontaktu, który wybrali. W tym momencie chcę, aby użytkownik mógł kliknąć numer telefonu kontaktu i poprosić moją aplikację o zachowanie niestandardowe.
Mam ABPeoplePickerNavigationController działa dobrze, ale biegnę do problemu wyświetlania ABPersonViewController. Mogę sprawić, że obraz na ekranie będzie wyglądał dobrze, ale wyświetli tylko zdjęcie, nazwisko i nazwę kontaktu osoby kontaktowej. Żadne z pozostałych pól kontaktu nie są wyświetlane.
Korzystam z elementu "ViewedProperties" w ABPersonViewController, aby poinformować program o wyświetleniu numerów telefonów. To tworzy dziwne zachowanie; kiedy wybieram kontakt, który nie ma przypisanych numerów telefonów, kontakt pojawi się z "Brak numerów telefonów" napisanym w tle (jak można się spodziewać), ale wybierając kontakt, który ma numer telefonu, dostaję tylko pusta strona kontaktowa (bez tekstu "Brak numerów telefonów").
Oto metoda w moim ABPeoplePickerNavigationController delegata klasy, które używam do tworzenia mojego PersonViewController klasy, która implementuje interfejs ABPersonViewController:
- (BOOL) peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
BOOL returnState = NO;
PersonViewController *personView = [[PersonViewController alloc] init];
[personView displayContactInfo:person];
[peoplePicker pushViewController:personView animated:YES];
[personView release];
return returnState;
}
Oto mój PersonViewController.h nagłówek file:
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AddressBookUI/AddressBookUI.h>
@interface PersonViewController : UIViewController <ABPersonViewControllerDelegate>
{
}
- (void) displayContactInfo: (ABRecordRef)person;
@end
Wreszcie, oto moja PersonViewController.m który jest stworzenie ABPersonViewController aby zobaczyć wybrany kontakt:
#import "PersonViewController.h"
@implementation PersonViewController
- (void) displayContactInfo: (ABRecordRef)person
{
ABPersonViewController *personController = [[ABPersonViewController alloc] init];
personController.personViewDelegate = self;
personController.allowsEditing = NO;
personController.displayedPerson = person;
personController.addressBook = ABAddressBookCreate();
personController.displayedProperties = [NSArray arrayWithObjects:
[NSNumber numberWithInt:kABPersonPhoneProperty],
nil];
[self setView:personController.view];
[[self navigationController] pushViewController:personController animated:YES];
[personController release];
}
- (BOOL) personViewController:(ABPersonViewController*)personView shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue
{
return YES;
}
@end
Czy ktoś ma jakiś pomysł, dlaczego ja zamiast widząc ten pusty ekran skontaktować się z jednym z klikalny pola numerów telefonów?
W porządku, myślę, że zbliżam się do znalezienia problemu. Jestem prawie pewien, że to z tej części rozmowy displayContactInfo powyżej:
[self setView:personController.view];
Kiedy pominąć ten wiersz, wszystko co widzę to czarny ekran po kliknięciu kontakt. ABPeoplePickerNavigationController przesuwa PersonViewController na stos NavigationController.Następnie obiekt PersonViewController tworzy instancję obiektu ABPersonViewController, ale z dowolnego powodu kontroler ABPersonViewController nigdy nie zostanie poprawnie dodany do stosu NavigationController.
Czy ktoś wie, jak dodać kontroler ABPersonViewController do stosu, a nie tylko PersonViewController?
Dzięki za umieszczenie tego. To był najlepszy tutorial, jaki mogłem znaleźć. Teraz muszę po prostu dowiedzieć się, jak uzyskać numer osoby z wybranego wpisu :-) – Akku