如何以编程方式修改通讯录中的联系人号码?

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

我在互联网上彻底search,但我发现所有的例子是加载联系人或添加新的联系人,但没有修改现有的联系人。

我怎么能得到一个联系人的所有电话号码列表,以防他有几个号码存储。

谢谢。

要允许用户直接编辑他们的详细信息,请参阅Apple关于显示和编辑个人logging的文档 。 最初的部分说:“设置代理,它必须采用ABPersonViewControllerDelegate协议。为了允许用户编辑logging,请将allowEditing设置为YES。

例如:

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

除了设置允许编辑之外,代码将与没有编辑显示个人详细信息所需的代码完全相同。 (这个代码是从这个答案中得出的,它显示了一个关于从地址簿中删除联系人的更完整的例子。)

不过,我看到你的标题是指编程式的。 苹果的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);