как отобразить CFStringType? Как kABHomeLabel

Я знаю это NSString и CFString платный мост, они могут преобразовать таким способом.

CFStringRef cfStr;
NSString* anStr=(NSString*)cfStr;

однако, когда я преобразовываю строку в таком случае при контакте addressbook

NSString* homeLabel=(NSString*)kABWorkLabel;

затем homeLabel "_$!<Work>!$_"; другой предопределенный CFStringRef в addressbook свойстве то же.

в моей программе я хочу получить и маркировку и информацию объекта маркировки.

NSString* label=ABMultiValueCopyLabelAtIndex(multi,i);

таким образом, как правильно получить строку маркировки?

6
задан Justin Boo 20 May 2012 в 13:13
поделиться

3 ответа

Попробуйте следующее:

+ (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 @"";
}
6
ответ дан 8 December 2019 в 03:38
поделиться

Вам нужно будет определять метки с суффиксом и префиксом. Затем выполните подстроку, чтобы получить метку.

Значения, которые вы получаете, являются правильными метками строк в базе данных адресной книги. Они просто немного дорабатываются перед тем, как представить их пользователю. Это все.

0
ответ дан 8 December 2019 в 03:38
поделиться

Пробовали использовать 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);
22
ответ дан 8 December 2019 в 03:38
поделиться