В приложении, которое я пишу, я позволяю пользователям связывать контакты с событиями.Они могут добавлять новые или существующие контакты с помощью инфраструктуры пользовательского интерфейса адресной книги.
После того, как контакты связаны, они отображаются, и пользователь может щелкнуть их, чтобы вызвать ABPersonViewController
.Редактирование работает, но когда представление человека закрыто, изменения не сохраняются.
Вот соответствующий код:
ABPersonViewController *personController = [[ABPersonViewController alloc] init];
personController.personViewDelegate = self;
personController.allowsEditing = YES;
personController.displayedPerson
[self.navigationController pushViewController:personController animated:YES];
[personController release];
После редактирования контакта и закрытия представления лица,если я снова нажму на контакт, никакой измененной информации не будет.
Я попытался создать свойство ABAddressBookRef
и назначить его контроллеру с помощью
personController.addressBook = ab;
, а затем сохранитьвпоследствии адресная книга, но это тоже не сработало.
РЕДАКТИРОВАТЬ:
Я уже внедрил <ABPersonViewControllerDelegate>
.У него есть только один метод, и, если я правильно помню, сбой в реализации, который вообще не позволил бы работать ABPersonViewController.
Вот моя полная реализация:
- (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
return YES;
}
Насколько яЯ знаю, это просто означает, что контроллер будет вести себя нормально.
РЕДАКТИРОВАТЬ 2:
ОК, поэтому я только что понял, что контроллер не отображает никакой информации овыбранный человек, кроме его имени.Я предполагаю, что это означает, что мои ABRecordRefs в некотором роде неверны.Я буду исследовать.
Я храню контакты в виде массива NSNumbers, содержащих идентификаторы записей.Вот мой код (где contactID - это массив идентификаторов записей, а ab - это ABAddressBookRef
):
NSMutableArray *contactArray = [NSMutableArray array];
for (NSNumber *contactNumber in contactIDs) {
NSInteger contactID = [contactNumber intValue];
[contactArray addObject:ABAddressBookGetPersonWithRecordID(ab, contactID)];
}
Кажется, это работает, потому что при выборе контакта загружается правильное имя,Однако другая информация не отображается.