Я знаю это NSString
и CFString
платный мост, они могут преобразовать таким способом.
CFStringRef cfStr;
NSString* anStr=(NSString*)cfStr;
однако, когда я преобразовываю строку в таком случае при контакте addressbook
NSString* homeLabel=(NSString*)kABWorkLabel;
затем homeLabel "_$!<Work>!$_"
; другой предопределенный CFStringRef
в addressbook свойстве то же.
в моей программе я хочу получить и маркировку и информацию объекта маркировки.
NSString* label=ABMultiValueCopyLabelAtIndex(multi,i);
таким образом, как правильно получить строку маркировки?
Попробуйте следующее:
+ (NSString *) displayPropertyName:(NSString *) propConst{
if ([propConst isEqualToString:@"_$!<Anniversary>!$_"]) return @"anniversary";
if ([propConst isEqualToString:@"_$!<Assistant>!$_"]) return @"assistant";
if ([propConst isEqualToString:@"_$!<AssistantPhone>!$_"]) return @"assistant";
if ([propConst isEqualToString:@"_$!<Brother>!$_"]) return @"brother";
if ([propConst isEqualToString:@"_$!<Car>!$_"]) return @"car";
if ([propConst isEqualToString:@"_$!<Child>!$_"]) return @"child";
if ([propConst isEqualToString:@"_$!<CompanyMain>!$_"]) return @"company main";
if ([propConst isEqualToString:@"_$!<Father>!$_"]) return @"father";
if ([propConst isEqualToString:@"_$!<Friend>!$_"]) return @"friend";
if ([propConst isEqualToString:@"_$!<Home>!$_"]) return @"home";
if ([propConst isEqualToString:@"_$!<HomeFAX>!$_"]) return @"home fax";
if ([propConst isEqualToString:@"_$!<HomePage>!$_"]) return @"home page";
if ([propConst isEqualToString:@"_$!<Main>!$_"]) return @"main";
if ([propConst isEqualToString:@"_$!<Manager>!$_"]) return @"manager";
if ([propConst isEqualToString:@"_$!<Mobile>!$_"]) return @"mobile";
if ([propConst isEqualToString:@"_$!<Mother>!$_"]) return @"mother";
if ([propConst isEqualToString:@"_$!<Other>!$_"]) return @"other";
if ([propConst isEqualToString:@"_$!<Pager>!$_"]) return @"pager";
if ([propConst isEqualToString:@"_$!<Parent>!$_"]) return @"parent";
if ([propConst isEqualToString:@"_$!<Partner>!$_"]) return @"partner";
if ([propConst isEqualToString:@"_$!<Radio>!$_"]) return @"radio";
if ([propConst isEqualToString:@"_$!<Sister>!$_"]) return @"sister";
if ([propConst isEqualToString:@"_$!<Spouse>!$_"]) return @"spouse";
if ([propConst isEqualToString:@"_$!<Work>!$_"]) return @"work";
if ([propConst isEqualToString:@"_$!<WorkFAX>!$_"]) return @"work fax";
return @"";
}
Вам нужно будет определять метки с суффиксом и префиксом. Затем выполните подстроку, чтобы получить метку.
Значения, которые вы получаете, являются правильными метками строк в базе данных адресной книги. Они просто немного дорабатываются перед тем, как представить их пользователю. Это все.
Пробовали использовать ABAddressBookCopyLocalizedLabel ?
Что-то вроде:
ABAddressBookRef ab = ABAddressBookCreate();
ABRecordID personID = <someid>;
CFIndex phoneNumberIndex = <anIndexFromSomewhere>;
ABRecordRef person = ABAddressBookGetPersonWithRecordID(ab, personID);
CFStringRef name = ABRecordCopyCompositeName(person);
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
CFStringRef number = ABMultiValueCopyValueAtIndex(phoneNumbers, phoneNumberIndex);
CFStringRef label = ABMultiValueCopyLabelAtIndex(phoneNumbers, phoneNumberIndex);
CFStringRef localizedLabel = ABAddressBookCopyLocalizedLabel(label);
NSLog(@"Person: %@", name);
NSLog(@"%@ : %@", localizedLabel, number);
CFRelease(label);
CFRelease(localizedLabel);
CFRelease(number);
CFRelease(phoneNumbers);
CFRelease(name);
CFRelease(ab);