有没有人成功地使用ABAddressBook框架搜索链接到iOS设备的Exchange GAL中的名称,或者其他?
我已经设法从存储在设备上的联系人中获取所有名称 - 这很容易 - 但它不包括来自Exchange GAL的名称.
我还设法获得了GAL的ABSource.它的类型是:kABSourceTypeExchangeGAL = kABSourceTypeExchange | kABSourceTypeSearchableMask
这表明源是可搜索的,因为该kABSourceTypeSearchableMask位是set(kABSourceTypeSearchableMask = 0x01000000),但如何搜索它是任何人的猜测?文档几乎不存在.
下面列出了类似的stackoverflow问题,但没有一个为此提供解决方案.
ABAddressBookCopyArrayOfAllPeopleInSource(addressBook, sourceToSearch)总是为包含类型位的源返回一个空数组kABSourceTypeSearchableMask,这表示你必须按名称搜索,而不是返回"所有人",因为全局地址列表中可能有成千上万的人,所以我不会期待它全部归还.
通讯录应用程序允许您按名称搜索并仅显示匹配的内容.在"收件人:"文本字段中输入文本时,Mail应用程序也是如此.
我试图让我的iOS 4地址簿的三个来源(1个MobileMe源和2个*ExchangeGAL源)的人.
NSLog语句总是为ExchangeGAL返回0个人,但返回MobileMe的人数.
通过使用ABAddressBookCopyArrayOfAllSources(addressBook)获取iOS通讯录中的所有源代码后,我尝试按源迭代源以获取每个源的更多信息.
我正确使用ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering吗?
期望在不同的地址簿来源中计算所有人.
-(void)countPeopleInSources
{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allSources = ABAddressBookCopyArrayOfAllSources(addressBook);
for (CFIndex i = 0; i < CFArrayGetCount(allSources); i++)
{
ABRecordRef source = (ABRecordRef)CFArrayGetValueAtIndex(allSources, i);
NSNumber *sourceTypeRef = (NSNumber *)((CFNumberRef)ABRecordCopyValue(source, kABSourceTypeProperty));
ABPersonSortOrdering sortOrdering = ABPersonGetSortOrdering();
int sourceType = [sourceTypeRef intValue];
switch (sourceType) {
case kABSourceTypeCardDAV:
NSLog(@"SourceTypeCardDAV");
break;
case kABSourceTypeCardDAVSearch:
NSLog(@"SourceTypeCardDAVSearch");
break;
case kABSourceTypeExchange:
NSLog(@"SourceTypeExchange");
break;
case kABSourceTypeExchangeGAL:
NSLog(@"SourceTypeExchangeGAL");
break;
case kABSourceTypeLDAP:
NSLog(@"SourceTypeLDAP");
break;
case kABSourceTypeLocal:
NSLog(@"SourceTypeLocal");
break;
case kABSourceTypeMobileMe:
NSLog(@"SourceTypeMobileMe");
break;
default:
break;
} …Run Code Online (Sandbox Code Playgroud) 关于收听iOS地址簿更改回调,提出了许多SO问题.着名问题地址簿同步.
但我的问题很窄,即如何在地址簿同步回调期间删除哪些联系人被删除.
void MyAddressBookExternalChangeCallback (ABAddressBookRef ntificationaddressbook,CFDictionaryRef info,void *context)
{
NSLog(@"Changed Detected......");
/*
NSDate *lastSyncTime = [self gettingLastSyncTime];
// By above time, I could get which contacts are modified(kABPersonModificationDateProperty)
// and which contacts are created newly( ABRecordGetRecordID()
// But how can I get this contact was DELETED?
*/
}
Run Code Online (Sandbox Code Playgroud)
但有人在清理这个问题检测什么改变.......在这里,他们做了(a)第一次存储所有记录ID(b)在同步期间,检查所有存储的记录ID与当前地址簿ID,以检查它们是否可用.如果没有,则假设它被删除联系(昂贵的操作).
我的问题:还有其他方法来检测DELETED联系人吗?
objective-c addressbook abaddressbook ios abaddressbooksource