アドレス帳を検索するためのカスタム インターフェイスを備えたアプリを作成しようとしています。ローカル アドレス帳の検索は簡単に思えますが、Exchange アドレス帳ソース (つまり、ABSourceType == kABSourceTypeExchangeGAL) で個人/レコードを検索する方法がわかりません。次のコードを使用して Exchange アドレス帳のソースを見つけてクエリを実行していますが、空の配列しか返されません。Exchange のアドレス帳にある人のリスト全体を要求してもすべてのエントリが返されない可能性があることは理解していますが、クエリを実行すると、そのリストの一部のサブセットが期待されます。繰り返しますが、代わりに空の配列を取得します。
Exchange アドレス帳ソースで連絡先を検索するにはどうすればよいですか?
#define CFNIL(x) if(x){CFRelease(x); x=nil;}
//code
ABAddressBookRef _addressbook = ABAddressBookCreate();
CFArrayRef allSources = ABAddressBookCopyArrayOfAllSources(_addressbook);
ABRecordRef exchangeSource;
for(CFIndex i =0; i<CFArrayGetCount(allSources); i++)
{
ABRecordRef source = (ABRecordRef)CFArrayGetValueAtIndex(allSources, i);
NSNumber *sourceTypeNumber = (NSNumber*)((CFNumberRef)ABRecordCopyValue(source, kABSourceType));
NSString *sourceTypeName = (NSString *)((CFStringRef)ABRecordCopyValue(source, kABSourceNameProperty));
int sourceType = [sourceTypeNumber intValue];
if (sourceType == kABSourceTypeExchangeGAL)
{
exchangeSource = source;
}
[sourceTypeNumber release];
[sourceTypeName release];
}
if(exchangeSource)
{
/*
This finds matches in the local device addressbook
NSArray *people = (NSArray *)ABAddressBookCopyPeopleWithName(_addressbook, CFSTR("joe"));
for(int i=0;i<[people count]; i++)
{
ABRecordRef person = (ABRecordRef)[people objectAtIndex:i];
ABMultiValueRef emails = (ABMultiValueRef)ABRecordCopyValue(person, kABPersonEmailProperty);
NSLog(@"emails: %@",emails);
[((NSArray*)emails) release];
}
[people release];
*/
//this array is always empty
CFArrayRef search = ABAddressBookCopyArrayOfAllPeopleInSource (_addressbook,exchangeSource);
NSLog(@"%@", search);
CFNIL(search);
}
CFNIL(exchangeSource);
CFNIL(_addressbook);