5

iOS 4アドレスブックの3つのソース(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日編集:コードは機能しているようですが、ExhangeGALからユーザーをカウントするのに問題があります。
anyouneは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
4

2 に答える 2

2

あなたが返すことを期待している人々は、あなたのアドレス帳に実際にいますか? ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering()GAL 全体を返すことは期待できません。それは大規模です。のサブセットを返すことだけを期待する必要がありABAddressBookCopyArrayOfAllPeople()ます。

于 2011-02-21T18:12:02.493 に答える
1

使用してみてください:

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);
    ABSourceType sourceType = [(NSNumber *)ABRecordCopyValue(currentSource, kABSourceTypeProperty) intValue];
    if (mySourceType == sourceType) {
        resultSource = currentSource;
        break;
    }
}

return resultSource;
}

ABRecordRef localSource()
{
    return sourceWithType(kABSourceTypeLocal);
}

ABRecordRef exchangeSource()
{
     return sourceWithType(kABSourceTypeExchange);
}

ABRecordRef mobileMeSource()
{
     return sourceWithType(kABSourceTypeMobileMe);
}

あなたはこれが役に立つと思うかもしれません:abaddressbook-absource-and-absourcetype

于 2011-03-02T12:40:16.277 に答える