ABPerson: Как получить домашние и рабочие телефоны человека (не факс)
Я хочу знать, можно ли извлечь номер домашнего телефона и номера рабочего телефона контакта вместо их домашнего или рабочего факса. Если нет, то почему это ограничение?
В ссылке упоминаются только следующие константы:
const ABPropertyID kABPersonPhoneProperty;
const CFStringRef kABPersonPhoneMobileLabel;
const CFStringRef kABPersonPhoneIPhoneLabel;
const CFStringRef kABPersonPhoneMainLabel;
const CFStringRef kABPersonPhoneHomeFAXLabel;
const CFStringRef kABPersonPhoneWorkFAXLabel;
const CFStringRef kABPersonPhoneOtherFAXLabel;
const CFStringRef kABPersonPhonePagerLabel;
Но если вы используете свой iPhone, вы заметите, что этикеток гораздо больше (не говоря уже о пользовательских). Как я могу выбрать их?
2 ответа
//contactData is ABRecordRef
ABMultiValueRef phones = ABRecordCopyValue(contactData, kABPersonPhoneProperty);
for (CFIndex i=0; i < ABMultiValueGetCount(phones); i++)
{
NSString* phoneLabel = (NSString*) ABMultiValueCopyLabelAtIndex(phones, i);
NSString* phoneNumber = (NSString*) ABMultiValueCopyValueAtIndex(phones, i);
//for example
if([phoneLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
{
//under phoneNumber you have a kABPersonPhoneMobileLabel value
}
.. add other standard labels
else //custom label
{
}
[phoneNumber release];
[phoneLabel release];
}
CFRelease(phones);
kABHomeLabel и kABWorkLabel
if (CFStringCompare(phoneLabelRef, kABHomeLabel, 0) == kCFCompareEqualTo) {
homePhone = (__bridge NSString *)phoneNumberRef;
} else if (CFStringCompare(phoneLabelRef, kABWorkLabel, 0) == kCFCompareEqualTo) {
officePhone = (__bridge NSString *)phoneNumberRef;
}
Смотрите этот отличный учебник: http://www.appcoda.com/ios-programming-import-contact-address-book/