Какие метки есть у адресной книги iPhone по умолчанию Ярлыки телефонных номеров? - PullRequest
8 голосов
/ 09 марта 2010

Мой вопрос касается разметки, которая окружает некоторые метки телефонных номеров по умолчанию в записях Персона в списке контактов на iPhone.

Я создал запись в адресной книге списка контактов iPhone для человека «Джон Смит» со следующими записями номера телефона:

  • Мобильный (604) 123-4567
  • iPhone (778) 123-4567
  • Главная (604) 789-4561
  • Работа (604) 456-7891
  • Основной (604) 789-1234
  • Мегафон (234) 567-8990

Обратите внимание, что первые пять меток являются метками по умолчанию, предоставленными приложением "Контакты", а последняя метка "мегафон" - это метка пользователя.

Я написал следующий метод для извлечения и отображения меток и телефонных номеров для каждого человека в адресной книге:

-(void)displayPhoneNumbersForAddressBook {
    ABAddressBookRef book = ABAddressBookCreate();
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(book);
    ABRecordRef record = CFArrayGetValueAtIndex(people, 0);
    ABMultiValueRef multi = ABRecordCopyValue(record, kABPersonPhoneProperty); 
    NSLog(@"---------" );
    NSLog(@"displayPhoneNumbersForAddressBook" );

    CFStringRef label, phone;
    for (CFIndex i = 0; i < ABMultiValueGetCount(multi); ++i) {
            label = ABMultiValueCopyLabelAtIndex(multi, i);
            phone = ABMultiValueCopyValueAtIndex(multi, i);
            NSLog(@"label: \"%@\"     number: \"%@\"", (NSString*)label, (NSString*)phone);
            CFRelease(label);
            CFRelease(phone);
    }
    NSLog(@"---------" ); 
    CFRelease(multi);
    CFRelease(people);
    CFRelease(book);
}

и вот вывод для введенной мной записи адресной книги:

2010-03-08 13:24:28.789 test2m[2479:207] ---------
2010-03-08 13:24:28.789 test2m[2479:207] displayPhoneNumbersForAddressBook
2010-03-08 13:24:28.790 test2m[2479:207] label: "_$!<Mobile>!$_"     number: "(604) 123-4567"
2010-03-08 13:24:28.790 test2m[2479:207] label: "iPhone"     number: "(778) 123-4567"
2010-03-08 13:24:28.791 test2m[2479:207] label: "_$!<Home>!$_"     number: "(604) 789-4561"
2010-03-08 13:24:28.791 test2m[2479:207] label: "_$!<Work>!$_"     number: "(604) 456-7891"
2010-03-08 13:24:28.792 test2m[2479:207] label: "_$!<Main>!$_"     number: "(604) 789-1234"
2010-03-08 13:24:28.792 test2m[2479:207] label: "megaphone"     number: "(234) 567-8990"
2010-03-08 13:24:28.793 test2m[2479:207] ---------

Какие символы разметки

_$!< and >!$_

окружающих большинство, кроме iPhone, меток по умолчанию для?

Можете ли вы указать мне, где в «Руководстве по программированию адресной книги для iPhone OS» я могу найти информацию?

Спасибо за вашу помощь.

Ответы [ 2 ]

7 голосов
/ 14 марта 2010

Я сталкиваюсь с той же проблемой. Это то, что я думаю до сих пор.

Разметка, которую вы видите, указывает системе, что это метка по умолчанию, а не настраиваемая метка. Если вы запустите этот код:
NSLog(kABOtherLabel);

вы получите этот результат:
_$!<Other>!$_

Таким образом, это значение сохраняется в константе kABOtherLabel (типа CFStringRef). Я думаю, что причина iPhone в том, что у нее нет разметки, заключается в том, что это «пользовательский» ярлык, но он создан Apple, а не пользователем.

Вы можете присвоить метке любое значение, которое вам нравится, о чем свидетельствует ваша megaphone метка выше. Но обратите внимание, что если вы попытаетесь создать номер телефона (или адрес электронной почты) с меткой «другой» без использования константы kABOtherLabel или ее значения _$!<Other>!$_, система будет думать, что вы создаете собственную метку , Как в этом примере:

ABMultiValueAddValueAndLabel(email, @"nospam@notarealdomain.com", @"other", NULL);

И если вы перейдете и отредактируете эту запись адресной книги на iPhone, она отобразится в отдельном списке пользовательских меток. (Таким образом, будет 2 варианта «Другой», один по умолчанию и один в пользовательских метках)

Хотя это не ответило на ваш вопрос, надеюсь, это поможет.

3 голосов
/ 26 мая 2017

Это в основном то же самое в новой CNContact Framework , которая заменила ABAddressBook как рекомендуемый способ обработки контактов.

Apple предоставляет шесть меток по умолчанию, на которые ссылаются специфичные для телефона константы CNLabelledValue :

CNLabelPhoneNumberiPhone = "iPhone"
CNLabelPhoneNumberMobile = "_$!<Mobile>!$_"
CNLabelPhoneNumberMain = "_$!<Main>!$_"
CNLabelPhoneNumberHomeFax = "_$!<HomeFAX>!$_"
CNLabelPhoneNumberOtherFax = "_$!<OtherFAX>!$_"
CNLabelPhoneNumberPager = "_$!<Pager>!$_"

Включение _$!< и >!$_ вокруг пяти из этих констант, скорее всего, является маркером того, что строки могут быть локализованы операционной системой, учитывая доступность метода localizedString (forLabel:) . Я полагаю, что причина того, что эти разделители не появляются вокруг iPhone, заключается в том, что Apple не локализует iPhone, который отображается как «iPhone» на всех языках.

Разумным поведением было бы скрывать их при отображении строки, что происходит с помощью localizedString(forLabel:), продолжать сохранять эти разделители со строкой при редактировании записи и сопоставлять любые созданные пользователем метки с этими строками, где пользовательская метка был равен основной части этих, то есть, Mobile, Main, Pager и так далее.

...