2010-04-03 4 views
5

So che NSString e CFString sono pedaggio, possono essere convertiti in tal modo.come visualizzare CFStringType? Come kABHomeLabel

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

tuttavia, quando si converte stringa in un caso del genere quando si tratta rubrica

NSString* homeLabel=(NSString*)kABWorkLabel; 

poi homeLabel è "_$!<Work>!$_"; l'altro valore predefinito CFStringRef nella proprietà della rubrica è lo stesso.

nel mio programma, voglio ottenere sia l'etichetta che le informazioni sull'etichetta.

NSString* label=ABMultiValueCopyLabelAtIndex(multi,i); 

quindi come ottenere correttamente la stringa dell'etichetta?

risposta

0

Dovrai rilevare le etichette con il suffisso e il prefisso. Quindi fai una sottostringa per ottenere l'etichetta.

I valori che si ottengono sono l'etichetta corretta delle stringhe nel database della rubrica. Sono semplicemente lucidati un po 'prima della presentazione all'utente. È tutto.

5

Prova questo:

+ (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

provato ad utilizzare ABAddressBookCopyLocalizedLabel?

Qualcosa di simile:

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