2013-07-15 9 views
0

Я могу легко получить свойства из ABRecord. Ie:IOS (AddressBook) - невозможно получить значение kABPersonFatherLabel и других меток

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

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

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

ответ

0

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

 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]; 
     }   

You can then access the values from the dictionary by passing the CFStringRef constants (after casting to NSString)

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

NSLog(@"%@", father);

0

Как это:

NSString *fatherLabel = (NSString *)kABPersonFatherLabel; 

NSString является «бесплатными мостиками» со своим коллегой Основного фонда, CFStringRef. См. «Бесконечное мостовое соединение» для получения дополнительной информации о бесплатном мостовом соединении.

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