私は自分のアプリケーションとiPhoneのAddressBookとの統合に取り組んでいます。これが私のプログラムの流れです。
- ユーザーが連絡先をインポートしたい
- アプリは「ABPeoplePickerNavigationController」をユーザーに提示します。
- ユーザーは必要な連絡先を選択します。
- デリゲートメソッドは次のように呼び出されます。
コードは次のとおりです。
- (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;
}
}
ただし、これは何もしないようです。コードは実行されますが、「OldContact」であるself.selectedContactはAddressBookに保存されません。だから、私の連絡先はまだ消えています。私は何が間違っているのですか?ABNewPersonViewControllerで[キャンセル]をクリックした場合、アドレス帳から提供されたデータが「削除」されたように見えますか?それで私がそれを与える人はそれから死ぬのですか?どんな助けでもいただければ幸いです!