iphone - 如何使用 ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering() 从 ExchangeGal 来源获取人数

标签 iphone objective-c cocoa-touch ios abaddressbooksource

我正在尝试通过我的 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;
    }
        CFArrayRef allPeopleInSource = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, sortOrdering );
        NSLog(@"Count allPeopleInSource: %i", CFArrayGetCount(allPeopleInSource));

        [sourceTypeRef release];
    }
}

编辑 2 月 24 日: 看起来代码有效,但我在从 ExhangeGALs 中计算人数时遇到了问题。
有没有人成功从 ExchangeGAL 中找回人?
MobileMe 来源报告人数统计。
这是来自控制台的日志:

2011-02-24 07:04:32.578 Contacts[10099:307] SourceTypeExchangeGAL
2011-02-24 07:04:32.593 Contacts[10099:307] Count allPeopleInSource: 0
2011-02-24 07:04:32.597 Contacts[10099:307] SourceTypeMobileMe
2011-02-24 07:04:32.641 Contacts[10099:307] Count allPeopleInSource: 151
2011-02-24 07:04:32.646 Contacts[10099:307] SourceTypeExchangeGAL
2011-02-24 07:04:32.652 Contacts[10099:307] Count allPeopleInSource: 0

最佳答案

您希望回访的人是否真的在您的地址簿中?您不应期望 ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering() 返回整个 GAL。那将是巨大的。您应该只期望它返回 ABAddressBookCopyArrayOfAllPeople() 的一个子集。

关于iphone - 如何使用 ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering() 从 ExchangeGal 来源获取人数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5062968/

相关文章:

iphone - 从 iPhone 应用程序在 iCloud 上创建文件夹

ios - 检查数组是否存在于 JSON 文件中 - iOS

ios - 用户按下了 UIAlertView 上的哪个按钮?

iphone - 我应该在哪里放置委托(delegate)方法以及如何调用它们?

c++ - Mac OS X 上的异步 I/O

ios - 滚动时 setNeedsStatusBarAppearanceUpdate() 似乎卡在了我的应用程序的主队列中

iphone - 如何以模态方式呈现标准的 UIViewController

ios - 是否可以使用 Apple Watch 打开 iPhone 应用程序?

iphone - 如何知道设备类型

ios - inout CGPoint * 作为参数意味着什么?