1

ABPeoplePickerNavigationController からレコードを選択し、ビュー コントローラーからその連絡先にメールを追加できるようにしたいと考えています。

ABAddressBook クラス リファレンスを検索して何ができるかを確認しようとしましたが、洞察がありませんでした =/

私はここで人の参照で立ち往生しています。誰も先に進む方法を知っていますか?

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

使用時に EXC_BAD_ACCESSABRecordSetValue(person, kABPersonEmailProperty, (__bridge CFStringRef)@"a@a.com", &error);が発生していますが、ログ エラーはありません。

アップデート

わかりました、次のように peoplePicker デリゲート内に保存することができました:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {

    ...

    self.addressBook = peoplePicker.addressBook;
    self.selectedPerson = person;

    // adding to native contacts
    CFErrorRef error = nil;
    ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty);
    bool didAddEmail = ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFTypeRef)(email), kABOtherLabel, NULL);
    if(didAddEmail){
        ABRecordSetValue(self.selectedPerson, kABPersonEmailProperty, emailMultiValue, nil);
        NSLog(@"Email saved......");
    } else {
        NSLog(@"Error adding email: %@", error);
    }
    ABAddressBookSave(self.addressBook, NULL);

    ...
}

奇妙なことに、ユーザーが textField に入力した後のように、このメソッドの外でそれを行おうとすると、エラーが発生します。

peoplePickerNavigationController次に、上記の方法の内側と外側でログを確認します。

(lldb) po self.selectedPerson
(ABRecordRef) $1 = 0x0a1838f0 <CPRecord: 0xa1838f0 ABPerson>
(lldb) po self.selectedPerson
(ABRecordRef) $4 = 0x0a1838f0 [no Objective-C description available]

最初のログはデリゲート メソッド内で行われたため、問題ないように見えますが、2 番目のログは奇妙です。つまり、メモリ参照はあるが内容はありません...

なぜそれが起こったのですか?

私の.hファイル:

@property (nonatomic) ABAddressBookRef addressBook;
@property (nonatomic) ABRecordRef selectedPerson;
4

1 に答える 1

1

私の解決策は、個人 ID を保存してから、再度 AddressBook にアクセスして以下を使用することでした。 ABAddressBookGetPersonWithRecordID(addressBook, self.selectedPersonID)

アドレス帳を再度作成します。

ABAddressBookRef addressBook = ABAddressBookCreate();
于 2013-01-22T15:46:46.283 に答える