我目前正在编写一个应用程序,它应该使用户能够修改应用程序中的联系方式(主要是数字),然后这些修改应该直接反映到通讯录中。
我在互联网上彻底搜索,但我找到的所有示例都是加载联系人或添加新联系人,但没有修改现有联系人。
另外,如果他存储了多个号码,我如何获取单个联系人的所有电话号码的列表。
我目前正在编写一个应用程序,它应该使用户能够修改应用程序中的联系方式(主要是数字),然后这些修改应该直接反映到通讯录中。
我在互联网上彻底搜索,但我找到的所有示例都是加载联系人或添加新联系人,但没有修改现有联系人。
另外,如果他存储了多个号码,我如何获取单个联系人的所有电话号码的列表。
要允许用户直接编辑他们的详细信息,请参阅Apple 关于显示和编辑人员记录的文档。开头部分说,“设置委托,它必须采用 ABPersonViewControllerDelegate 协议。要允许用户编辑记录,请将allowEditing设置为YES。”
例如:
ABPersonViewController *personViewController = [[ABPersonViewController alloc] init];
personViewController.personViewDelegate = self;
personViewController.allowsEditing = YES;
除了设置allowEditing 之外,该代码将与显示一个人的详细信息而不进行编辑所需的代码完全相同。(此代码来自此答案,该答案显示了有关从通讯簿中删除联系人的更完整示例。)
但是,我看到您的标题是指以编程方式执行此操作。Apple 的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);