Какие теги расположены вокруг меток с номерами телефонов людей в адресной книге iPhone по умолчанию?
-
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 и т. д.