Какие теги расположены вокруг меток с номерами телефонов людей в адресной книге iPhone по умолчанию?

StackOverflow https://stackoverflow.com/questions/2404975

  •  18-09-2019
  •  | 
  •  

Вопрос

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

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

  • Мобильный (604) 123-4567
  • айфон (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» я могу найти эту информацию?

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

Это было полезно?

Решение

Я столкнулся с той же проблемой.Вот что я думаю на данный момент.

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

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

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

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

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

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

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

Другие советы

Во многом то же самое происходит и в новом Платформа CNContact это заменило 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 и т. д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top