2016-03-31 3 views
1

Я внедряю новое приложение для iOS, которое поддерживает только iOS9 +. Таким образом, мы используем новую структуру контактов для доступа к номерам телефонов для контактов, хранящихся на устройстве.iOS9 Контакты Рамки отсутствуют ярлыки телефонных номеров?

CNPhoneNumber определяет метки для различных типов телефонных номеров, но содержит гораздо меньший список типов, чем фактический экран контактов iOS. Например, на моем iPhone я могу добавить число с типом «Работа» к контакту, но в SDK нет соответствующей метки CNLabelPhoneNumberWork. Я ищу не в том месте или это так, как есть? У контактов может быть куча чисел, которые я не могу определить, если я не закодировал строку «$ !! $$ !! $» в моем приложении?

Насколько я могу сказать CNPhoneNumber только предоставляет эти метки:

@available(iOS 9.0, *) 
public let CNLabelPhoneNumberiPhone: String 
@available(iOS 9.0, *) 
public let CNLabelPhoneNumberMobile: String 
@available(iOS 9.0, *) 
public let CNLabelPhoneNumberMain: String 
@available(iOS 9.0, *) 
public let CNLabelPhoneNumberHomeFax: String 
@available(iOS 9.0, *) 
public let CNLabelPhoneNumberWorkFax: String 
@available(iOS 9.0, *) 
public let CNLabelPhoneNumberOtherFax: String 
@available(iOS 9.0, *) 
public let CNLabelPhoneNumberPager: String 

Когда я иду и добавить номера к моим контактам список доступных типов гораздо больше.

ответ

2

Вы верны в том смысле, что это должны быть только предопределенные для телефонных номеров.

Но, как описано в док Apple: Номер телефона Этикетки

Эти константы являются предопределенными метки, которые могут быть использованы в CNLabeledValue объект, имеющий значение CNPhoneNumber.

Вы бы еще получить NSString* (примечание неenum) от CNLabeledValuelabel собственности, и она будет содержать все, что появляется в списке контактов. Поэтому будьте готовы, вы также можете получить странный входной пользователь, созданный с помощью опции «Пользовательские метки».


На вопрос о «Контакты могут иметь кучу цифр, которые я не в состоянии определить, если я не жёстко от Apple„$ !! $“строку в мое приложение?»

Ответ будет НЕТ

phoneNumbers из CNContact:

Это свойство представляет собой массив CNLabeledValue объектов, каждый из которых имеет метку и значение CNPhoneNumber.

Когда вы итерация хотя, .label даст вам что-то вроде «Работы», и .value даст фактический номер, который вы хотите.

РЕДАКТИРОВАТЬ:

Интересно, что в Contacts Framework Reference, появляется CNLabelHome и CNLabelWork, что, как представляется, "Generic этикетки" константы в CNLabeledValue класса.

+0

Моя проблема в том, что свойство .label CNLabeledValue на самом деле дает мне строки, которые выглядят как некоторые идентификаторы, которые необходимо сопоставить.Итак, с моим кодом вот так: func mapData (number: CNLabeledValue?) { если пусть valueObj = номер? .value as? CNPhoneNumber { numberLabel.text = "\ (valueObj.stringValue)" } CNLabelPhoneNumberWorkFax numberTitleLabel.text = номер? .label } numberTitleLabel заканчивает тем, что строка как _ $! Mobile! $ _ –

+0

попробуйте 'localizedStringForLabel (_ :)' метод? – zcui93

+1

Вы были на правильном пути с номерами без телефонных номеров. Поэтому CNLabelWork можно использовать для телефонного номера типа «Рабочий». –

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