Получение Определенного ABSource от ABAddressBook в iOS 4+
У кого-нибудь есть пример, как получить конкретный ABSource из ABAddressBook в iOS 4+?
4 ответа
iOS 4+ предоставляет новый API, который позволяет выбирать определенный источник ABS из ABAddressBook. Это может быть полезно, так как некоторые операции, например, создание группы ABG, не поддерживаются в некоторых источниках (например, Exchange).
"Не все исходные группы поддержки групп, что более очевидно, Exchange ничего не знает о группах". - http://flavors.me/volonbolon
Прилагаются функции, которые используют новый API для получения источников определенных типов, которые могут использоваться при вызовах ABGroupCreateInSource().
#define CFRELEASE_AND_NIL(x) CFRelease(x); x=nil;
ABRecordRef sourceWithType (ABSourceType mySourceType)
{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef sources = ABAddressBookCopyArrayOfAllSources(addressBook);
CFIndex sourceCount = CFArrayGetCount(sources);
ABRecordRef resultSource = NULL;
for (CFIndex i = 0 ; i < sourceCount; i++) {
ABRecordRef currentSource = CFArrayGetValueAtIndex(sources, i);
CFTypeRef sourceType = ABRecordCopyValue(currentSource, kABSourceTypeProperty);
BOOL isMatch = mySourceType == [(NSNumber *)sourceType intValue];
CFRELEASE_AND_NIL(sourceType);
if (isMatch) {
resultSource = currentSource;
break;
}
}
CFRELEASE_AND_NIL(addressBook);
CFRELEASE_AND_NIL(sources);
return resultSource;
}
ABRecordRef localSource()
{
return sourceWithType(kABSourceTypeLocal);
}
ABRecordRef exchangeSource()
{
return sourceWithType(kABSourceTypeExchange);
}
ABRecordRef mobileMeSource()
{
return sourceWithType(kABSourceTypeMobileMe);
}
Действительно хочу знать, как создать свой собственный источник. Так же, как группа Exchange создает, с которой вам не нужно редактировать исходную запись по умолчанию, но создавать свою собственную, и, что самое замечательное, адресная книга автоматически свяжет их вместе.
В коде есть ошибки, поэтому он всегда возвращает два, поскольку метод: ABRecordGetRecordType не является частью ABSource. Включает только:
kABPersonType для записей о персонале kABGroupType для записей в группе. kABSourceType для исходных записей.
Чтобы определить правильный тип, вы должны использовать вместо этого: ABRecordCopyValue (source, kABSourceTypeProperty)!:) Отлично работает на моем iPhone с или без localSource.
Удачи!
Xyzzycoder-
Ваше решение работает хорошо, если уже есть localSource, но просто возвращает NULL, если его нет.
Есть ли способ, скажем, создать ABRecordRef для локального источника? Мне нужно иметь возможность хранить мой контакт с несинхронизируемым источником.
ура