ios - 在 iOS 上检索多个电话联系人标签

标签 ios iphone contacts addressbook

Ios 允许为一个联系人存储多个家庭/手机/工作号码。有没有办法区分家庭电话号码的两个标签?我们收到所有家庭号码的标签 Home。是否有区分 Home1、Home2 等的选项。以下代码仅检索所有相应电话号码的 Home/work/Mobile

for(CFIndex j = 0; j < ABMultiValueGetCount(phones1); j++)
{      
  mobileLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phones1, j);
  if ([contactPhoneentry containsObject:mobileLabel]) 
  {
      continue;
  }

  if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
  {
     home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
     identstring = @"Mobile";
  }
  else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel])
  {
      home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
       identstring = @"iPhone";
  }
  else if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMainLabel])
  {
      home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
      identstring = @"Main";
  }
  else if([mobileLabel isEqualToString:(NSString *)kABPersonPhonePagerLabel])
  {
      home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
      identstring = @"Pager";
  }
  else if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneHomeFAXLabel])
  {
      home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
      identstring = @"Home Fax";
  }
  else if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneWorkFAXLabel])
  {
      home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
      identstring = @"Work Fax";
  }
  else if([mobileLabel isEqualToString:@"_$!<Home>!$_"])
  {
      home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
      identstring = @"Home";
  }
  else if ([mobileLabel isEqualToString:@"_$!<Work>!$_"])
  {
       home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
       identstring = @"Work";
  }
  else
  {
       home_mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones1,j);
       identstring = @"Other";
  }

这是检索电话号码和标签的正确方法吗?

最佳答案

我不确定我是否完全理解您要完成的任务,但您不应该使用标签来区分一部手机和另一部手机,因为正如您所知,标签不是唯一的。 multiValueRef 中的每个值(在本例中为每个电话号码)都有一个唯一标识符。此标识符对于多值中的其他标识符是唯一的,因此即使您有多个具有相同标签的号码,您也可以使用它来标识电话号码。

在您上面的代码中,您可以通过调用获取电话号码标识符

int identifier = ABMultiValueCopyLabelAtIndex(phones1, j);

看起来您发布的代码在将标签从地址簿转换为本地化标签(即“_$!<工作>!$_”到“工作”)时会遇到很多麻烦。地址簿框架有一个函数可以为您处理这个问题——ABAddressBookCopyLocalizedLabel()。例如-

NSString *localizedString = (__bridge NSString *)ABAddressBookCopyLocalizedLabel(kABPersonPhoneMobileLabel);

这会将 localizedString 设置为“mobile”。

关于ios - 在 iOS 上检索多个电话联系人标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20282183/

相关文章:

php - 用于从 gmail、hotmail、yahoo mail 等导入联系人的任何框架/第三方工具

ios - 对两个不同类型的 promise 使用相同的 then/catch/finally block

ios - 在 uiwebview 中渲染 svg 会导致内存压力(和应用程序崩溃)

ios - 如何为不同的设备缩放按钮

ios - 在 iOS 应用程序启动序列中显示/删除启动图像的位置

java - 如何按标题获取组ID?

ios - 无法使用 NSKeyedArchiver 存档自定义类对象

iphone - 委托(delegate)方法如何知道何时被调用

iphone - 如何更改 UIBarButton 项的字体颜色?

android - Whatsapp 联系人同步