Получить локализованную метку телефона, используя рамки контактов

Я пытаюсь получить значение локализованной метки телефона с помощью CNContact.

    NSError *error = nil;

    CNContactFetchRequest *fetchRequest =[[CNContactFetchRequest alloc] initWithKeysToFetch:keysToFetch];

    [addressBook enumerateContactsWithFetchRequest:fetchRequest error:&error usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {

       CNLabeledValue *phoneNumberValue = contact.phoneNumbers.firstObject;

       NSString *label = phoneNumberValue.label;
       NSLog(@"Phone Label: %@",label); //Logs value like _$!<Home>!$_

       CNPhoneNumber *phoneNumber = phoneNumberValue.value;
       NSString *phoneNumberString = phoneNumber.stringValue;

       NSLog(@"Phone No: %@",phoneNumberString);
    }];

Проблема в том, что метка телефона возвращает необработанное значение, например _$!<Home>!$_, _$!<Mobile>!$_, Но мне нужен простой текст, как Home, Mobile. Есть ли способ, которым я могу получить локализованное значение с помощью фреймворков Contact. Я не хочу использовать адресную книгу, поскольку она устарела в iOS 9.

3 ответа

Решение

Использование CNLabeledValueметод класса s + localizedStringForLabel: и передать ярлык

пример:

   CNLabeledValue *phoneNumberValue = contact.phoneNumbers.firstObject;
   NSString *label = phoneNumberValue.label;
   label = [CNLabeledValue localizedStringForLabel:label];
   NSLog(@"Phone Label: %@",label); //Logs value like _$!<Home>!$_

И вот это в Swift 3:

let displayNumbers = contact.phoneNumbers.map() {
    let label = CNLabeledValue<NSString>.localizedString(forLabel: $0.label ?? "")
    return label + ": \u{200E}" + $0.value.stringValue
}

Добавлена ​​переопределение unicode LeftToRight, чтобы гарантировать, что число не будет перевернуто на языках RTL.

Добавить эту строку Контакт Доступ

 if contact.isKeyAvailable(CNContactPhoneNumbersKey){

         for phoneNumber:CNLabeledValue in contact.phoneNumbers {
                        let number  = phoneNumber.value

                        let number2 = number.stringValue

                        let lable :String  =  CNLabeledValue<NSString>.localizedString(forLabel: phoneNumber.label! )

                        print("\(lable)  \(number.stringValue)")
                    }


                }
Другие вопросы по тегам