ABMultiValueCopyLabelAtIndex возвращает ноль, но метка видна в адресной книге

Я пытаюсь прочитать ярлык определенного сервиса мгновенных сообщений в адресной книге. В этом случае я тестирую с помощью службы Facebook Messenger на моем телефоне. Контакт имеет связанные контакты, но только один зарегистрированный сервис мгновенных сообщений.

Я пытался найти информацию о том, как ABMultiValueCopyLabelAtIndex работает, но все, что я нашел, было то, что он "может вернуть ноль" Если в адресной книге нет видимой метки, то да, я понимаю, почему она вернула бы ноль. В этом случае, однако, есть ярлык, и он читает "Facebook Messenger" в представлении лица. Я все еще получаю ноль, почему?

- (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)personRecord property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue
{
    // all IM services:
    ABMultiValueRef instantMessageProperty = ABRecordCopyValue(personRecord, property);
    // one particular IM service:
    CFDictionaryRef instantMessageDict = ABMultiValueCopyValueAtIndex(instantMessageProperty, ABMultiValueGetIndexForIdentifier(instantMessageProperty, identifierForValue));
    // its name:
    NSString *serviceName = (__bridge NSString*)CFDictionaryGetValue(instantMessageDict, kABPersonInstantMessageServiceKey);
    // its label:
    NSString *serviceLabel = (__bridge_transfer NSString*)ABMultiValueCopyLabelAtIndex(instantMessageProperty, ABMultiValueGetIndexForIdentifier(instantMessageProperty, identifierForValue));

    NSLog(serviceName); // logs "Facebook", so things seem to work
    NSLog(serviceLabel); // logs nothing, and I confirmed that serviceLabel == nil

[...]
}

0 ответов

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