Получить имена меток для свойств ABPerson - PullRequest
0 голосов
/ 23 января 2012

Я хочу получить все имена меток для свойств объекта ABPerson. Например: запись ABPerson имеет три определенных телефонных номера: мобильный, другой, рабочий. Я использую метод labelAtIndex для получения имени метки, но возвращаемая строка содержит необходимое значение, заключенное в символы $ !! $ . Вместо того, чтобы возвращать просто «Мобильный», я получаю эти «_ $! <» Символы переноса. </p>

У меня есть следующий код:

//person object points to ABPerson record from addressBook
ABMultiValue *phoneNumbers = [person valueForProperty:kABPhoneProperty];

NSUInteger count = [phoneNumbers count];

for (int i = 0; i < count; i++) {
    NSLog(@"Phone numbers label: %@ value: %@", [phoneNumbers labelAtIndex:i], [phoneNumbers valueAtIndex:i]);        
}

В логе я получаю следующее:

2012-01-23 01:14:04.234 FixMyAddressBook[3667:707] Phone numbers label: _$!<Mobile>!$_ value: +327382738273
2012-01-23 01:14:04.370 FixMyAddressBook[3667:707] Phone numbers label: _$!<Work>!$_ value: +3293829328

Может кто-нибудь указать мне, пожалуйста, как я могу получить названия меток для свойств без специальных символов?

1 Ответ

4 голосов
/ 23 апреля 2012

Насколько мне известно, вам нужно получить локализованную метку для этого элемента, вам нужно убедиться, что вы используете правильный ссылочный код.

// Grab the right property first
ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
CFIndex phoneNumberCount = ABMultiValueGetCount(phoneNumbers);

for(int k = 0; k < phoneNumberCount; k++)
        {

        //Get phone number label by iterating across this
            CFStringRef phoneNumberValue = ABMultiValueCopyValueAtIndex( phoneNumbers, k );

CFStringRef phoneNumberLabel = ABMultiValueCopyLabelAtIndex(phoneNumbers, i);
            CFStringRef phoneNumberLocalizedLabel = ABAddressBookCopyLocalizedLabel( phoneNumberLabel );    
// converts "_$!<Work>!$_" to "work" and "_$!<Mobile>!$_" to "mobile"
//do whatever you want to do here
//release your references
        CFRelease(phoneNumberLocalizedLabel);
CFRelease(phoneNumberValue);
}
...