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
[...]
}