2010-04-03 6 views
5

Je sais que NSString et CFString sont pont à péage, ils peuvent convertir de telle manière.comment afficher CFStringType? Comme kABHomeLabel

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

cependant, quand je convertir la chaîne dans un tel cas lorsque le traitement addressbook

NSString* homeLabel=(NSString*)kABWorkLabel; 

alors homeLabel est "_$!<Work>!$_"; l'autre CFStringRef prédéfini dans la propriété du carnet d'adresses est la même.

Dans mon programme, je veux obtenir à la fois l'étiquette et l'information de l'article de l'étiquette.

NSString* label=ABMultiValueCopyLabelAtIndex(multi,i); 

comment obtenir correctement la chaîne de l'étiquette?

Répondre

0

Vous devrez détecter les étiquettes avec le suffixe et le préfixe. Ensuite, faites une sous-chaîne pour obtenir l'étiquette.

Les valeurs que vous obtenez sont le libellé correct des chaînes dans la base de données du carnet d'adresses. Ils sont juste polis un peu avant la présentation à l'utilisateur. C'est tout.

5

Essayez ceci:

+ (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 @""; 
} 
21

essayé d'utiliser ABAddressBookCopyLocalizedLabel?

Quelque chose comme:

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);