Как правильно использовать ABPersonViewController с ABPeoplePickerNavigationController для просмотра контактной информации?

Обновление 9/2/10: этот код больше не работает с обновлением iOS 4 - он завершается ошибкой с внутренним утверждением. Теперь в справочной библиотеке iPhone SDK есть отличный пример API адресной книги под названием "QuickContacts «.

Пример кода доступен здесь; это поможет вам решить эту проблему:http://developer.apple.com/iphone/library/samplecode/QuickContacts/Introduction/Intro.htmlI»

я пытаюсь добавить в мое приложение функцию, позволяющую пользователю выбрать контакт изABPeoplePickerNavigationController, который затем отображаетABPersonViewController в соответствии с контактом, который они выбрали. На этом этапе я хочу, чтобы пользователь мог нажать на контактS номер телефона и мое приложение отвечает с пользовательским поведением.

у нас естьABPeoplePickerNavigationController работает нормально, но яЯ сталкиваюсь с проблемой отображенияABPersonViewController, Я могу получитьABPersonViewController просто анимировать на экран, но он отображает только контактфото, имя и название компании. Ни один из контактов "s отображаются другие поля.

м, используяdisplayedProperties' элемент вABPersonViewController сказать программе показывать номера телефонов. Это создает какое-то странное поведение; когда я выбираю контакт, которому не назначены телефонные номера, контакт отображается сНет телефонных номеров " написано в фоновом режиме (как выожидаю), но при выборе контакта, у которого есть номер телефона, все, что я получаю, это пустая страница контакта (без "Нет телефонных номеров " текст).

Вот'S метод в моемДелегат ABPeoplePickerNavigationController класс, который яя использую, чтобы создать мойPersonViewController класс, который реализуетИнтерфейс 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;
}

Вот'мойPersonViewController.h заголовочный файл:

#import 
#import 
#import 

@interface PersonViewController : UIViewController  
{

}

- (void) displayContactInfo: (ABRecordRef)person;

@end

Наконец-то здесь'мойPersonViewController.m тот'с созданияABPersonViewController для просмотра выбранного контакта:

#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

Кто-нибудь знает, почему яВы видите этот пустой экран контактов вместо экрана с полями номера телефона, на которые можно нажимать?

Хорошо, я думаю, чтоЯ все ближе к поиску проблемы. Я'Я уверен, что этос этой частью вызова displayContactInfo выше:

[self setView:personController.view];

Когда я опускаю эту строку, все, что я вижу, это пустой экран, когда я щелкаю контакт. ABPeoplePickerNavigationController помещает PersonViewController в стек NavigationController. Затем PersonViewController создает экземпляр объекта ABPersonViewController, но по какой-либо причине ABPersonViewController никогда не добавляется должным образом в стек NavigationController.

Кто-нибудь знает, как добавить ABPersonViewController в стек, а не просто PersonViewController?

Ответы на вопрос(1)

Ваш ответ на вопрос