Я столкнулся с (странной) проблемой: я хотел бы получить количество телефонных номеров контакта, но по какой-то причине я не могу.Не удается прочитать kABPersonPhoneProperty
Я использовал
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *contacts = (NSArray*) ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);
, чтобы получить массив всех контактов. Тогда я хотел бы использовать
ABMultiValueRef ref = ABRecordCopyValue([contacts objectAtIndex:i], kABPersonPhoneProperty);
NSLog(@"%d",ref==NULL);
ABRecordCopyValue
но всегда возвращает nil
...
Обратите внимание, что я в состоянии получить другую информацию о контакте, например, извлекая имя прекрасно работает с использованием
CFStringRef name = ABRecordCopyCompositeName([contacts objectAtIndex:i]);
Может кто-нибудь объяснить мне, что я делаю неправильно? Я использую Snow Leopard с Xcode 4.2 и я разрабатываю для прошивки 4.0 ...
EDIT: Я нашел решение: вместо того, чтобы использовать
ABRecordCopyValue([contacts objectAtIndex:i], kABPersonPhoneProperty);
Я использовал
ABRecordID idRec = ABRecordGetRecordID([contacts objectAtIndex:i]);
ABMultiValueRef ref = ABRecordCopyValue(ABAddressBookGetPersonWithRecordID(addressBook, idRec), kABPersonPhoneProperty);
Однако мне пришлось сохранить действительную ссылку на addressBook
(не выпускать ее), поэтому решение, предложенное EricS, выглядит лучше.
Он должен работать. Попробуйте использовать другое многозначное значение, например 'kABPersonEmailProperty'. Может быть, у всех, кого вы тестировали, нет телефонных номеров? Кроме того, по поводу ничего, я бы предложил написать 'NULL == ref'; наоборот, случайный отказ от знака равенства не вызовет ошибок и не приведет к вводящим в заблуждение результатам. :) – matt
Ничего не изменилось. В моей адресной книге есть только два тестовых контакта: у первого есть два номера и одно электронное письмо, а во втором - 1 номер телефона и нет электронной почты. В обоих случаях он возвращает nil ... – Saphrosit
Вы разрешили это? – matt