2010-04-03 16 views
5

Sé que NSString y CFString son peaje-puente, se pueden convertir de tal manera. Sin embargocómo mostrar CFStringType? Al igual que kABHomeLabel

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

, al convertir cadena en tal caso cuando se trata de direcciones

NSString* homeLabel=(NSString*)kABWorkLabel; 

continuación homeLabel es "_$!<Work>!$_"; el otro CFStringRef predefinido en la propiedad de la libreta de direcciones es el mismo.

en mi programa, quiero obtener la información de la etiqueta y la etiqueta.

NSString* label=ABMultiValueCopyLabelAtIndex(multi,i); 

Entonces, ¿cómo obtener correctamente la cadena de la etiqueta?

Respuesta

0

Vas a tener que detectar etiquetas con el sufijo y el prefijo. Luego haz una subcadena para obtener la etiqueta.

Los valores que está recibiendo son la etiqueta correcta de las cadenas en la base de datos de libreta de direcciones. Simplemente se pulieron un poco antes de la presentación al usuario. Eso es todo.

5

Prueba esto:

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

intentado usar ABAddressBookCopyLocalizedLabel?

Algo así como:

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