2010-04-03 5 views
5

Ich weiß, dass NSString und CFString Maut-Brücke sind, können sie auf diese Weise konvertieren.Wie wird CFStringType angezeigt? Wie kABHomeLabel

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

jedoch, wenn ich String in einem solchen Fall konvertieren, wenn Adressbuchs Umgang

NSString* homeLabel=(NSString*)kABWorkLabel; 

dann homeLabel ist "_$!<Work>!$_"; das andere vordefinierte CFStringRef in der Adressbucheigenschaft ist das gleiche.

In meinem Programm möchte ich die Informationen sowohl des Etiketts als auch des Etiketts erhalten.

NSString* label=ABMultiValueCopyLabelAtIndex(multi,i); 

also, wie man die Schnur des Aufklebers richtig erhält?

Antwort

0

Sie müssen Etiketten mit dem Suffix und dem Präfix erkennen. Dann führe einen Teilstring aus, um das Label zu erhalten.

Die Werte, die Sie erhalten, sind die korrekte Bezeichnung der Zeichenfolgen in der Adressbuchdatenbank. Sie werden nur ein wenig vor der Präsentation für den Benutzer poliert. Das ist alles.

5

Try this:

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

Versuchte ABAddressBookCopyLocalizedLabel mit?

Etwas wie:

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