0

我正在我的应用程序和 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:在- (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 中点击了“取消”,它会“删除”它从通讯簿中提供的数据?所以我给它的人然后死了?任何帮助,将不胜感激!

4

1 回答 1

2

我通过不使用 解决了这个问题ABNewPersonViewController,而是ABPersonViewController在用户选择了他们想要使用的人之后使用。信息不再被删除。

于 2011-07-18T22:23:55.337 回答