2010-03-26 4 views
1

Я пытаюсь получить информацию об учетной записи мгновенного сообщения из существующих контактов AddressBook на iOS. Я просматриваю контакты и получаю контакты, у которых есть значение обмена мгновенными сообщениями, но я не могу прочитать jabber-адрес.Извлечение информации о мгновенных сообщениях из ABRecordRef

abArray = (NSArray *)ABAddressBookCopyArrayOfAllPeople(ABAddressBookCreate()); 

for(int i=0 ; i<[abArray count];i++) 
{ 
    ABRecordRef record = [abArray objectAtIndex:i]; 

    ABMutableMultiValueRef multi = ABRecordCopyValue(record, kABPersonInstantMessageProperty); 

    for(CFIndex x=0;x<ABMultiValueGetCount(multi);x++) 
    { 
    CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(multi, x); 
    CFStringRef jabber = CFDictionaryGetValue(dict, kABPersonInstantMessageServiceJabber); 

    if(CFDictionaryContainsKey(dict, kABPersonInstantMessageServiceJabber)) 
    { 
    NSLog(@"yes"); 
    } 
    else { 
    NSLog(@"no"); 
    } 

    // only to make it possible to log to console 
    NSString *jaab = (NSString *)jabber; 
    NSLog(@"jabber adress: %@" , jaab); 
    } 
    CFRelease(dict); 
    } 
} 

Что я делаю неправильно?

+1

«Я прохожу через контакты, и у меня есть контакты, у которых есть запись в IM, но я не могу прочитать jabber-адрес». Почему бы и нет? Что происходит вместо этого? –

ответ

0
for(int i=0 ; i<[abArray count];i++) 
{ 
    ABRecordRef record = [abArray objectAtIndex:i]; 
    ABMutableMultiValueRef multi = ABRecordCopyValue(record, kABPersonInstantMessageProperty); 

    for(CFIndex x=0;x<ABMultiValueGetCount(multi);x++) 
    { 
     CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(multi, x); 
     CFStringRef jabber; 


     //Use this piece of code to print the dict to log and check 

     NSDictionary *nsdict = (NSDictionary *)dict; 
     NSString *jabberID = [NSString stringWithString:@""]; 
     NSLog(@"Dict: %@", nsdict); 
     if([[nsdict valueForKey:@"service"] isEqualToString:@"Jabber"]){ 
      jabberID = [nsdict valueForKey:@"username"]; 
     } 
     //Code to print dict to log ends here. Comment the whole piece if not needed. 


     if(CFStringCompare((CFStringRef)@"jabber", CFDictionaryGetValue(dict, @"service"), 0)) 
     { 
      NSLog(@"yes"); 
      jabber = CFDictionaryGetValue(dict, @"username"); 

      // only to make it possible to log to console 
      NSString *jaab = (NSString *)jabber; 
      NSLog(@"jabber adress: %@" , jaab); 
     } 
     else { 
      NSLog(@"no"); 
     } 

    } 
    //CFRelease(dict); 
} 
+0

CFDictionaryContainsKey (dict, kABPersonInstantMessageServiceJabber) Словарь dict не содержит ключа kABPersonInstantMessageServiceJabber. Но если вы попробуете приведенный выше код, вы можете лучше понять пары ключ-значение в dict. –

Смежные вопросы