【问题标题】:Custom addressbook for ABPeoplePickerNavigationController on iPhoneiPhone 上 ABPeoplePickerNavigationController 的自定义地址簿
【发布时间】:2011-04-12 19:55:34
【问题描述】:

我正在尝试通过将新记录添加到设备通讯录(基本上是将私人联系人列表与设备 AB 合并)来在 iPhone 上创建自定义通讯录。然后我想让用户选择一个联系人,我认为我可以使用ABPeoplePickerNavigationController.addressbook 属性来做到这一点:

ABAddressBookRef contacts = ABAddressBookCreate();

for (PrivateUserType *user in rosterItems)
{
  CFErrorRef err = NULL;
  ABRecordRef ref = ABPersonCreate();
  ABRecordSetValue(ref, kABPersonLastNameProperty, (CFStringRef)user.lastName, &err);

  if (err != NULL)
  {
    NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease];
    NSLog(@"Can not set name: %@", errorStr);
  }

  ...

  ABAddressBookAddRecord(contacts, ref, &err);
  if (err != NULL)
  {
    NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease];
    NSLog(@"Error adding XMPP roster user to addressbook: %@", errorStr);
  }
}

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.addressBook = contacts;
[viewController presentModalViewController:picker animated:YES];
[picker release];

条目已成功添加到地址簿(我可以验证我是否在循环之后执行ABAddressBookSave() 以添加所有内容)。但是,picker 不会显示这些条目(除非我保存了联系人,这当然会将所有更改保存到设备地址簿中)。

有没有办法做到这一点?这是在 iOS 4.3.1 上。

谢谢!

【问题讨论】:

    标签: iphone ios abaddressbook


    【解决方案1】:

    正如 Toro 所说,您需要先保存对数据库的任何更改。 ABPeoplePickerNavigationController 不适用于未提交数据或自定义数据。

    你可以在 Apple Dev Forums 上看到相当新鲜的话题 https://devforums.apple.com/message/370070#370070 在哪里问了类似的问题。苹果公司的人说:“我看不出有什么办法做到这一点。”但他建议为此填写一个错误,以便在未来的 iOS 版本中实现此功能。

    您现在所能做的就是从头开始为这个地址簿编写自己的 UI :(

    更新:嘿嘿。我也在 App Dev Forum 上找到了你的问题)))

    【讨论】:

    • 感谢您的回答。我几乎认为是这种情况,但希望有别的东西。呃,好吧。谢谢..
    【解决方案2】:

    您需要通过 ABAddressBookSave() 方法保存对数据库的任何更改。

    apple doc link

    【讨论】:

    • 是的,我知道它适用于 ABAddressBookSave(),但希望不要使用它。不过,感谢您的帮助。
    • 如果你想以不保存的方式显示这些联系人,你需要使用 ABRecordRef 来代替。您可以浏览那些 ABRecordRef 中的信息。但是直到 ABAddressBookSave() 到 db,那些 ABRecordRef 没有有效的记录 ID。因为它们没有保存到数据库中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多