Пользовательская адресная книга для ABPeoplePickerNavigationController на iPhone - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь создать пользовательскую адресную книгу на iPhone, добавляя новые записи в адресную книгу устройства (в основном, объединяя личный список контактов с устройством AB).Затем я хочу позволить пользователю выбрать контакт, который, как я думал, мог бы сделать со свойством .addressbook ABPeoplePickerNavigationController:

ABAddressBookRef contacts = ABAddressBookCreate();

for (PrivateUserType *user in rosterItems)
{
  CFErrorRef err = NULL;
  ABRecordRef ref = ABPersonCreate();
  ABRecordSetValue(ref, kABPersonLastNameProperty, (CFStringRef)user.lastName, &err);

  if (err != NULL)
  {
    NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease];
    NSLog(@"Can not set name: %@", errorStr);
  }

  ...

  ABAddressBookAddRecord(contacts, ref, &err);
  if (err != NULL)
  {
    NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease];
    NSLog(@"Error adding XMPP roster user to addressbook: %@", errorStr);
  }
}

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.addressBook = contacts;
[viewController presentModalViewController:picker animated:YES];
[picker release];

Записи успешно добавлены в адресную книгу (которую я могу проверитьесли я сделаю ABAddressBookSave() после цикла, чтобы добавить все).Однако записи не отображаются picker (если я не сохраняю контакты, что, конечно, сохраняет все изменения в адресную книгу устройства).

Есть ли способ сделать это?Это на iOS 4.3.1.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Как сказал Торо, сначала нужно сохранить все изменения в базе данных.ABPeoplePickerNavigationController не предназначен для работы с незафиксированными данными или с пользовательскими данными.

Вы можете увидеть довольно свежую тему на форумах Apple Dev https://devforums.apple.com/message/370070#370070, где был задан похожий вопрос.А парень из Apple говорит, что «я не вижу никакого способа сделать это».Но он предлагает заполнить баг для этого, чтобы реализовать эту функцию в будущем выпуске iOS.

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

обновлено: хе-хе. Я тоже нашел ваш вопрос на форуме разработчиков приложений)))

0 голосов
/ 13 апреля 2011

Необходимо сохранить любые изменения в базе данных с помощью ABAddressBookSave () метода.

ссылка на Apple Doc .

...