从iOS 4+中的ABAddressBook获取特定的ABSource

时间:2011-01-13 11:41:20

标签: iphone ios4 abaddressbook

有没有人举例说明如何从iOS 4 +中的ABAddressBook获取特定的ABSource?

4 个答案:

答案 0 :(得分:9)

iOS 4+提供了新的API,允许用户从ABAddressBook中选择特定的ABSource。这可以用作一些操作,例如,某些来源(即Exchange)不支持创建ABGroup。

“并非所有的源类型都支持组,更明显的是,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);
}

答案 1 :(得分:2)

真的想知道如何创建自己的源码。就像Exchange创建的组你不需要编辑默认的源记录但创建自己的源记录,最奇妙的是,地址簿会自动将它们链接在一起。 / p>

答案 2 :(得分:1)

Xyzzycoder-

如果已有localSource,您的解决方案可以正常工作,但如果没有,则返回NULL。

有没有办法为localSource创建一个ABRecordRef?我需要能够将我的联系人存储到非同步源。

干杯

答案 3 :(得分:1)

代码有错误,这就是为什么它总是返回两个,因为方法:ABRecordGetRecordType不是ABSource的一部分。它只包括:

个人记录的kABPersonType 组记录的kABGroupType。 源记录的kABSourceType。

要找出你必须使用的正确类型:ABRecordCopyValue(source,kABSourceTypeProperty)! :)使用或不使用localSource在我的iPhone上运行良好。

祝你好运!