0

私は自分のアプリケーションとiPhoneのAddressBookとの統合に取り組んでいます。これが私のプログラムの流れです。

  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;
        }
    }

ただし、これは何もしないようです。コードは実行されますが、「OldContact」であるself.selectedContactはAddressBookに保存されません。だから、私の連絡先はまだ消えています。私は何が間違っているのですか?ABNewPersonViewControllerで[キャンセル]をクリックした場合、アドレス帳から提供されたデータが「削除」されたように見えますか?それで私がそれを与える人はそれから死ぬのですか?どんな助けでもいただければ幸いです!

4

1 に答える 1

2

この問題はABNewPersonViewController、を使用せずABPersonViewControllerに、ユーザーが使用したい人を選択した後に使用することで解決しました。情報は削除されなくなりました。

于 2011-07-18T22:23:55.337 に答える