1

iOS 5以降のアドレス帳からプログラムでメールと電話番号の値を取得したい. 次のコードを試しました。姓と名は変更されますが、メールアドレスと電話番号は変更されません。これが私のコードです

ABAddressBookRef addressBook=ABAddressBookCreate();
ABRecordRef record = ABAddressBookGetPersonWithRecordID(addressBook, [userInfo.userId intValue]);
NSNumber *recordId = [NSNumber numberWithInteger:ABRecordGetRecordID(record)];
NSLog(@"recordId:- %d",[recordId intValue]);

// First & Last name
ABRecordSetValue(record, kABPersonFirstNameProperty, (__bridge void*)userInfo.firstName , nil); 
ABRecordSetValue(record, kABPersonLastNameProperty, (__bridge void*)userInfo.lastName, nil);

//Phone number is a list , so create a multivalue    
ABMutableMultiValueRef phoneNumberMultiValue =
ABMultiValueCreateMutable(kABPersonPhoneProperty);
ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,(__bridge void*)userInfo.phoneNumbers,(__bridge void*)userInfo.phoneNumberLabel, NULL);

// Email address is a list , so create a multivalue
ABMutableMultiValueRef emailMultiValue =
ABMultiValueCreateMutable(kABPersonEmailProperty);
ABMultiValueAddValueAndLabel(emailMultiValue ,(__bridge void*)userInfo.emailAddress,(__bridge void*)userInfo.emailAddressLabel, NULL);

// Save Address Book
BOOL isContactEdited = ABAddressBookSave(addressBook, nil);
CFRelease(addressBook);
return isContactEdited;

上記のコード phonenumberlabel & emailAddressLabel では、 phone number & email address のラベル値です。例: 「モバイル」または「ホーム」など。

名と姓に使用されるような複数値参照を設定する方法が見つかりません。どんな種類の助けも大歓迎です。ありがとう。

4

1 に答える 1

1

まず、PeoplePickerNavigationController から連絡先を選択すると:

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

    self.selectedPerson = ABRecordGetRecordID(person);

    (...)

}

次に、私の.hで

@property (nonatomic) ABRecordID selectedPerson;

// ネイティブの連絡先にメールを追加

次に、.m に戻ります。

ABAddressBookRef addressBook = ABAddressBookCreate();
CFErrorRef error = nil;
ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty);
bool didAddEmail = ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFTypeRef)(email), kABOtherLabel, NULL);

if(didAddEmail){
    ABRecordSetValue(ABAddressBookGetPersonWithRecordID(addressBook, self.selectedPerson),
                     kABPersonEmailProperty,
                     emailMultiValue,
                     nil);
} else {
    NSLog(@"Error adding email: %@", error);
    error = nil;
}

次に、アドレス帳をコードのどこかに保存する必要があります...

bool bSuccess = ABAddressBookSave(addressBook, &error);
if (!bSuccess) {
    NSLog(@"Could not save to address book: %@", error);
}
于 2013-01-22T19:01:25.097 に答える