我正在研究我的应用程序和iPhone的AddressBook之间的某些集成。这是我的计划流程。
以下是代码:
- (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中点击取消,它会“删除”它从地址簿中提供的数据?那么我给它的人就死了?任何帮助将不胜感激!
答案 0 :(得分:2)
我通过不使用ABNewPersonViewController
解决了这个问题,而是在用户选择了他们想要使用的人之后使用ABPersonViewController
。该信息不再被删除。