IOS (AddressBook) - невозможно получить значение kABPersonFatherLabel и других меток

Я могу получить свойства из ABRecord без труда. То есть:

NSString *firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);

Но я изо всех сил пытаюсь найти способ восстановить ценность CFStringRef константы из записи. Например, как бы я назначил NSString к стоимости записей человека kABPersonFatherLabel? (Т. Е. Записи отцов / фамилий меток)

Спасибо за любую помощь

2 ответа

Решение

Неважно, я нашел решение. Для тех, кто ищет решение, смотрите ниже:

        ABMultiValueRef relatedNames = ABRecordCopyValue(person, kABPersonRelatedNamesProperty);
        NSMutableArray *relatedNameList = [[[NSMutableArray alloc] init] autorelease];
        NSDictionary *dic = [[[NSMutableDictionary alloc] init] autorelease];

        for(CFIndex j = 0; j < ABMultiValueGetCount(relatedNames); j++)
        {
            NSString *relatedNameLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(relatedNames, j) autorelease];
            if ([relatedNameLabel isEqualToString:(NSString *)kABPersonFatherLabel])
            {
                relatedNameString = @"";
            }
            if (relatedNameLabel == nil)
            {
                relatedNameLabel = @"";
            }               
            NSString *relatedNameString = [(NSString*)ABMultiValueCopyValueAtIndex(relatedNames, j) autorelease];
            if (relatedNameString == nil)
            {
                relatedNameString = @"";
            }
            // Add the object to the dictionary
            [dic setValue:(NSString *)relatedNameString forKey:relatedNameLabel];
        }           

Затем вы можете получить доступ к значениям из словаря, передав константы CFStringRef (после приведения к NSString)

NSString *father = [dic objectForKey:(NSString *)kABPersonFatherLabel];

NSLog( @"%@", father );

Как это:

NSString *fatherLabel = (NSString *)kABPersonFatherLabel;

NSString является "бесплатной связью" со своим основным партнером, CFStringRef, См. "Бесплатные мосты" для получения дополнительной информации о бесплатных мостах.

В платформе Core Foundation и Foundation есть несколько типов данных, которые можно использовать взаимозаменяемо. Эта возможность, называемая беспошлинным мостовым соединением, означает, что вы можете использовать тот же тип данных, что и параметр для вызова функции Core Foundation или в качестве получателя сообщения Objective-C.

Другие вопросы по тегам