如何以编程方式修改地址簿中的联系人号码?

问题描述 投票:1回答:1

我目前正在编写一个应用程序,该应用程序应该允许用户修改应用程序中的联系人详细信息(主要是数字),然后这些修改应该直接反映到地址簿。

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

如果他存储了多个号码,我怎样才能获得单个联系人的所有电话号码列表。

iphone ios addressbook abaddressbooksource
1个回答
0
投票

要允许用户直接编辑其详细信息,请参阅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);
© www.soinside.com 2019 - 2024. All rights reserved.