Контакт удаляется из адресной книги после выбора - PullRequest
0 голосов
/ 19 июля 2011

Я работаю над интеграцией моего приложения с адресной книгой iPhone. Вот поток моей программы.

  1. Пользователь хочет импортировать контакт
  2. Приложение представляет пользователю «ABPeoplePickerNavigationController».
  3. Пользователь выбирает контакт, который ему нужен:
  4. Метод делегата называется:

Вот код:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
      shouldContinueAfterSelectingPerson:(ABRecordRef)person {
    self.selectedContact = person;
    [self showNewContactViewThroughController:peoplePicker withRecord:person];
    NSLog(@"should continue after selecting");
    return NO;
}

5: In - (void)showNewContactViewThroughController:withRecord: Мы создаем AbNewPersonViewController.

`ABNewPersonViewController *newController = [[ABNewPersonViewController alloc] init];`

`newController.displayedPerson = person;`

`newController.newPersonViewDelegate = self;`

А затем нажмите его.

6: пользователь нажимает кнопку «Отмена», чтобы выйти из представления ABNewPersonViewController.
7. Проверьте приложение «Контакты». Контакт, выбранный на шаге 3, исчез. Пуф, пропал, удален, удален.

В попытке решить эту проблему я сохраняю ABRecordRef (в переменную экземпляра selectedContact). Тогда в - (void)newPersonViewController:didCompleteWithNewPerson: у меня есть:

if (person) {
//do stuff with the person
else {
        ///
        /// This means they canceled, so we need to save the old person back
        ///
        if (self.selectedContact) {
            ABAddressBookRef addressBook = ABAddressBookCreate();
            CFErrorRef error = NULL;
            ABAddressBookAddRecord(addressBook, self.selectedContact, &error);
            if (error != NULL) {
                NSLog(@"Error Adding Record: %@", error);
            }
            ABAddressBookSave(addressBook, &error);
            if (error != NULL) {
                NSLog(@"AccountDetailTableViewController.newPersonViewController() The old contact was not saved successfully. %@", error);
            }
            self.selectedContact = nil;
        }
    }

Однако, похоже, это ничего не делает. Код выполняется, но «Старый контакт», self.selectedContact, не сохраняется в адресной книге. Итак, мои контакты все еще исчезают. Что я делаю неправильно? Похоже, что если вы нажмете кнопку Отмена в ABNewPersonViewController, он «удалит» данные, которые он дал из адресной книги? Значит, человек, которому я это даю, умирает? Любая помощь будет оценена!

1 Ответ

2 голосов
/ 19 июля 2011

Я решил эту проблему, НЕ используя ABNewPersonViewController, а скорее используя ABPersonViewController после того, как пользователь выбрал человека, которого он хочет использовать.Информация больше не удаляется.

...