2010-04-03 14 views
5

Tôi biết rằng NSStringCFString là cầu thu phí, họ có thể chuyển đổi theo cách như vậy.cách hiển thị CFStringType? Giống như kABHomeLabel

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

Tuy nhiên, khi tôi chuyển đổi chuỗi trong một trường hợp như vậy khi giao dịch addressbook

NSString* homeLabel=(NSString*)kABWorkLabel; 

sau đó homeLabel là "_$!<Work>!$_"; khác được xác định trước CFStringRef trong thuộc tính sổ địa chỉ là giống nhau.

trong chương trình của mình, tôi muốn nhận được cả nhãn và thông tin của mục nhãn.

NSString* label=ABMultiValueCopyLabelAtIndex(multi,i); 

để biết cách nhận đúng chuỗi nhãn?

Trả lời

0

Bạn sẽ phải phát hiện nhãn có hậu tố và tiền tố. Sau đó, làm một chuỗi con để lấy nhãn.

Giá trị bạn nhận được là nhãn chính xác của các chuỗi trong cơ sở dữ liệu sổ địa chỉ. Họ chỉ được đánh bóng một chút trước khi trình bày cho người dùng. Đó là tất cả.

5

Hãy thử điều này:

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

Cố gắng sử dụng ABAddressBookCopyLocalizedLabel?

Giống như:

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