使用联系人框架获取本地化 phone 标签
Fetch localized phone label using Contacts frameworks
到目前为止,我正在尝试使用 CNContact.My 尝试获取本地化的 phone 标签值:
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);
}];
问题是 phone 标签 returns 原始值,如 _$!<Home>!$_
、_$!<Mobile>!$_
。但我需要像 Home、Mobile 这样的纯文本。有什么方法可以使用 Contact 框架获取本地化值。我不想使用地址簿,因为它在 iOS 9.
中已弃用
使用CNLabeledValue
s class方法+ 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: [=10=].label ?? "")
return label + ": \u{200E}" + [=10=].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)")
}
}
到目前为止,我正在尝试使用 CNContact.My 尝试获取本地化的 phone 标签值:
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);
}];
问题是 phone 标签 returns 原始值,如 _$!<Home>!$_
、_$!<Mobile>!$_
。但我需要像 Home、Mobile 这样的纯文本。有什么方法可以使用 Contact 框架获取本地化值。我不想使用地址簿,因为它在 iOS 9.
使用CNLabeledValue
s class方法+ 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: [=10=].label ?? "")
return label + ": \u{200E}" + [=10=].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)")
}
}