选择后,联系人将从AddressBook中删除

时间:2011-07-18 21:01:02

标签: iphone objective-c cocoa-touch abaddressbook abrecordref

我正在研究我的应用程序和iPhone的AddressBook之间的某些集成。这是我的计划流程。

  1. 用户想要导入联系人
  2. App向用户提供“ABPeoplePickerNavigationController”。
  3. 用户选择他们想要的联系人:
  4. 调用Delegate方法:
  5. 以下是代码:

    - (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未保存到AddressBook。所以,我的联系人仍在消失。我究竟做错了什么?看起来如果你在ABNewPersonViewController中点击取消,它会“删除”它从地址簿中提供的数据?那么我给它的人就死了?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

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