如何以编程方式修改通讯录中的联系电话?

Posted

技术标签:

【中文标题】如何以编程方式修改通讯录中的联系电话?【英文标题】:How to modify a contact number in address book programmatically? 【发布时间】:2011-09-28 00:13:41 【问题描述】:

我目前正在编写一个应用程序,它应该允许用户在应用程序中修改联系方式(主要是数字),然后这些修改应该直接反映到通讯录中。

我在互联网上彻底搜索,但我找到的所有示例都是加载联系人或添加新联系人,但没有修改现有联系人。

如果他存储了多个号码,我如何获取单个联系人的所有电话号码列表。

【问题讨论】:

【参考方案1】:

要允许用户直接编辑其详细信息,请参阅Apple's documentation on displaying and editing a person record。开头部分说,“设置委托,它必须采用 ABPersonViewControllerDelegate 协议。要允许用户编辑记录,请将allowEditing设置为YES。”

例如:

ABPersonViewController *personViewController = [[ABPersonViewController alloc] init];
personViewController.personViewDelegate = self;
personViewController.allowsEditing = YES;

除了设置allowEditing 之外,该代码将与显示一个人的详细信息而不进行编辑所需的代码完全相同。 (此代码取自this answer,其中显示了有关从通讯录中删除联系人的更完整示例。)

但是,我看到您的标题是指以编程方式执行此操作。 Apple 的Address Book Programing Guide for ios 说:“请记住,地址簿数据库最终归用户所有,因此应用程序必须小心不要对其进行意外更改。通常,更改应由用户发起或确认。”

但是,这是可能的。以下示例出现在该文档的第 17 页:

ABRecordRef aRecord = ABPersonCreate();
CFErrorRef anError = NULL;
bool didSet;

didSet = ABRecordSetValue(aRecord, kABPersonFirstNameProperty, CFSTR("Katie"), &anError);
if (!didSet) /* Handle error here. */

didSet = ABRecordSetValue(aRecord, kABPersonLastNameProperty, CFSTR("Bell"), &anError);     
if (!didSet) /* Handle error here. */

CFStringRef firstName, lastName; 
firstName = ABRecordCopyValue(aRecord, kABPersonFirstNameProperty);
lastName = ABRecordCopyValue(aRecord, kABPersonLastNameProperty);
/* ... Do something with firstName and lastName. ... */

CFRelease(aRecord);
CFRelease(firstName);
CFRelease(lastName);

【讨论】:

以上是关于如何以编程方式修改通讯录中的联系电话?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将 iPhone 联系人导出到 .vcf 文件

以编程方式(Kotlin)在Android中修改和显示联系人的最佳方式?

如何在以编程方式将 newInsert 插入地址簿后获取最后插入的 RawContacts ID?

以编程方式修改 SipAddress

如何使用谷歌联系人api以编程方式将手机联系人同步到android中的gmail

如何删除以编程方式添加新联系人时添加的 Android 联系人应用程序中的重复条目?