abaddressbookcopyarrayofallpeopleinsourcewithSortOrdering ()을 사용하여 기독교 소스에서 사람들의 수를 얻는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/5062968

문제

나는 iOS 4 주소록의 세 가지 소스 (1 MobileMe Source 및 2 * Exchangeous)로 사람들을 얻으려고 노력하고 있습니다.


nslog 문은 항상 교환을 위해 0 명을 반환하지만 MobileMe에 대한 사람들의 수를 반환합니다.


AbadDressBookCopyArrayOfAllSources (AddressBook)를 사용하여 iOS 주소록에서 모든 소스를 얻은 후에는 각 소스에 대한 더 많은 정보를 얻으려면 소스별로 소스를 반복하려고합니다.

abaddressbookcopyarrayofallpeopleinsourcewithsortorgeing을 올바르게 사용하고 있습니까?
다른 주소록 소스의 모든 사람들의 수를 기대할 것입니다.

-(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];
    }
}
.

편집 FEB24 : 그것은 코드가 작동하는 것처럼 보이지만 사람들이 exhangegals에서 계산하는 데 문제가 있습니다.
어쨌든 거래소에서 사람들을 성공적으로 검색 했습니까?
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
.

도움이 되었습니까?

해결책

Try Using:

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);
}

You might find this helpful :abaddressbook-absource-and-absourcetype

다른 팁

Are the people you're expecting to return actually in your addressbook? You shouldn't expect ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering() to return the entire GAL. That would be massive. You should only expect it to return a subset of ABAddressBookCopyArrayOfAllPeople().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top