Jfg*_*Dev 6 iphone exchange-server abaddressbook
我正在尝试创建一个可用于搜索Exchange GAL的应用程序,但是,我发现有关此主题的新4.0文档令人困惑.有谁知道如何在GAL中搜索包含特定字符串的名称(例如"Smi")?我的源代码目前几乎无用,因为我只是试图指出我只想要搜索GAL而不是设备上的本地联系人.另外,如何使用kABSourceTypeSearchableMask?我在这里缺少一些基本的东西.从文档......
来源类型
这些常量标识源的类型.
enum {
kABSourceTypeLocal = 0x0,
kABSourceTypeExchange = 0x1,
kABSourceTypeExchangeGAL = kABSourceTypeExchange | kABSourceTypeSearchableMask,
kABSourceTypeMobileMe = 0x2,
kABSourceTypeLDAP = 0x3 | kABSourceTypeSearchableMask,
kABSourceTypeCardDAV = 0x4,
kABSourceTypeCardDAVSearch = kABSourceTypeCardDAV | kABSourceTypeSearchableMask,
};
typedef int ABSourceType;
Run Code Online (Sandbox Code Playgroud)
当我查询默认的源类型时,我得到"1",这似乎表明默认类型是"kABSourceTypeExchange",这是正确的,因为这是我在我的设置中.我不知道如何超越这一点......
由于整个源概念是4.0中ABAddressBook框架的一个新概念,我不认为人们对此有很多经验,但希望有人可以帮助我理解如何使用上述...谢谢.
要访问Exchange GAL,您需要使用函数ABAddressBookCopyArrayOfAllSources来获取所有源的数组,然后遍历数组以尝试获取Exchange GAL的正确源.使用ABRecordCopyValue()函数获取源的kABSourceTypeProperty属性.
例如
ABRecordRef searchableExchangeSource;
addressBook = ABAddressBookCreate();
CFArrayRef allSources = ABAddressBookCopyArrayOfAllSources(addressBook);
for (CFIndex i = 0; i < CFArrayGetCount(allSources); i++) {
ABRecordRef source = (ABRecordRef)CFArrayGetValueAtIndex(allSources, i);
// Get source properties
NSNumber *sourceTypeRef = (NSNumber *)((CFNumberRef)ABRecordCopyValue(source, kABSourceTypeProperty));
NSString *sourceTypeName = (NSString *)((CFStringRef)ABRecordCopyValue(source, kABSourceNameProperty));
int sourceType = [sourceTypeRef intValue];
NSLog(@"Found Source Type: %@ with ABSourceType %i", sourceTypeName,sourceType);
if (sourceType == kABSourceTypeExchangeGAL) {
searchableExchangeSource = source;
}
[sourceTypeRef release];
[sourceTypeName release];
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您设置了多个"Exchange"帐户,则会获得具有相同ABSourceType的多个源.不幸的是,在我的有限测试中,Exchange GAL的kABSourceTypeNameProperty为NULL,因此您无法使用此属性来区分多个Exchange GAL源.
一旦你有了合适的源,它就是ABRecordRef类型,所以你可以像任何其他记录一样与它进行交互.
| 归档时间: |
|
| 查看次数: |
5872 次 |
| 最近记录: |