Получение Определенного ABSource от ABAddressBook в iOS 4+ - PullRequest
3 голосов
/ 13 января 2011

У кого-нибудь есть пример того, как получить конкретный ABSource из ABAddressBook в iOS 4+?

Ответы [ 4 ]

9 голосов
/ 13 января 2011

iOS 4+ предоставляет новый API, который позволяет выбирать определенный источник ABS из ABAddressBook. Это может быть полезно в качестве некоторых операций, например, создание группы ABG, не поддерживается в некоторых источниках (например, Exchange).

«Не все исходные группы поддерживают группы, что более очевидно, Exchange ничего не знает о группах». - http://flavors.me/volonbolon#1a5/tumblr

В приложении есть функции, которые используют новый 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);
}
2 голосов
/ 26 января 2011

Действительно хочу знать, как создать свой собственный источник. Так же, как группа Exchange создает, с которой вам не нужно редактировать исходную запись по умолчанию, но создайте свою собственную, и, что самое замечательное, адресная книга автоматически свяжет их вместе.

1 голос
/ 06 февраля 2011

В коде есть ошибки, поэтому он всегда возвращает два, поскольку метод: ABRecordGetRecordType не является частью ABSource.Он включает только:

kABPersonType для записей о персонале kABGroupType для записей в группах.kABSourceType для исходных записей.

Чтобы выяснить правильный тип, вы должны использовать: ABRecordCopyValue (source, kABSourceTypeProperty) вместо этого!:) Отлично работает на моем iPhone с или без localSource.

Удачи!

1 голос
/ 13 января 2011

Xyzzycoder-

Ваше решение хорошо работает, если локальный источник уже есть, но просто возвращает NULL, если его нет.

Есть ли способ, скажем, создать ABRecordRef для локального источника?Мне нужно иметь возможность хранить мой контакт с несинхронизируемым источником.

Приветствия

...