有没有人举例说明如何从iOS 4 +中的ABAddressBook获取特定的ABSource?
答案 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上运行良好。
祝你好运!