我目前正在编写一个应用程序,应该允许用户修改应用程序中的联系人详细信息(主要是数字),然后这些修改应该直接反映到地址簿。
我在互联网上彻底搜索过,但我发现的所有例子都是加载联系人或添加新联系人,但没有修改现有联系人。
如果他存有多个号码,我怎样才能获得单个联系人的所有电话号码列表。
答案 0 :(得分: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);