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 是电话号码和电子邮件地址的标签值。例如“移动”或“家庭”等。

我找不到像用于名字和姓氏一样设置多值引用的方法。任何形式的帮助表示赞赏。谢谢。

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 回答