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

时间:2013-11-29 09:22:38

标签: 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";
  }

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

2 个答案:

答案 0 :(得分:1)

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

在上面的代码中,您可以通过调用

获取电话号码标识符
int identifier = ABMultiValueCopyLabelAtIndex(phones1, j);

看起来您发布的代码在将地址簿中的标签转换为本地化标签(即'_ $!&lt; Work&gt;!$ _'到'work')时会遇到很多麻烦。地址簿框架具有为您处理此问题的功能 - ABAddressBookCopyLocalizedLabel()。例如 -

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

这会将localizedString设置为“mobile”。

答案 1 :(得分:0)

无法区分标签。 IOS(和OSX)不需要ABMultiValue中标签的唯一性。例如,可以有多个家庭电话号码。这也适用于地址,电子邮件,社交档案等。