2013-11-29 3 views
1

Ios позволяет хранить несколько домашних/мобильных/рабочих номеров для контакта. Есть ли способ дифференцировать два ярлыка номера домашнего телефона? Мы получаем ярлык Home для всех домашних номеров. Есть ли вариант там дифференцировать home1, Home2 и т.д. Следующий код только получает, как домашний/рабочий/Mobile для всех соответствующих телефонных номеровИзвлечение нескольких ярлыков контактов на телефоне iOS

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"; 
    } 

Является ли это правильный путь, чтобы получить телефонные номера и этикетки?

ответ

0

Невозможно отличить этикетки. IOS (и OSX) не требуют уникальности меток в ABMultiValue. Например, есть несколько номеров домашних телефонов. Это также относится к адресам, электронной почте, социальным профилям и т. Д.

+0

Im делает проект, в котором я группирую несколько контактов с их несколькими номерами телефонов. Когда я выбираю номер дома (1) для своей группы, он будет добавлен в группу моего приложения. Если пользователь имеет право удалить домашний (1) номер телефона, он должен быть обновлен до группы приложения. Синхронизация стала сложной, поскольку нет надлежащей идентификации –

1

Я не уверен, что полностью понимаю, чего вы пытаетесь выполнить, но вы не должны использовать ярлык, чтобы отличать один телефон от другого, потому что, поскольку вы знаете, метки не уникальны. Каждое значение в multiValueRef, в данном случае каждый номер телефона, имеет уникальный идентификатор. Этот идентификатор уникален для других идентификаторов в многозначном значении, поэтому вы можете использовать его для идентификации номеров телефонов, даже если у вас несколько номеров с одинаковой меткой.

В коде выше, вы можете получить идентификатор номера телефонов, позвонив

int identifier = ABMultiValueCopyLabelAtIndex(phones1, j); 

Это также выглядит как код, который вы публикуемым будут много хлопот, чтобы преобразовать метку из адресной книги в локализованный label (т.е. '_ $! < Работа>! $ _' to 'work'). В структуре адресной книги есть функция для обработки этого для вас - ABAddressBookCopyLocalizedLabel(). Например:

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

Это установит localizedString в «мобильное».

Смежные вопросы