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.