Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使用AddressBookCopyArrayFallPeopleInSourceWithSortOrdering()从ExchangeGal源获取人数_Iphone_Objective C_Cocoa Touch_Ios_Abaddressbooksource - Fatal编程技术网

Iphone 如何使用AddressBookCopyArrayFallPeopleInSourceWithSortOrdering()从ExchangeGal源获取人数

Iphone 如何使用AddressBookCopyArrayFallPeopleInSourceWithSortOrdering()从ExchangeGal源获取人数,iphone,objective-c,cocoa-touch,ios,abaddressbooksource,Iphone,Objective C,Cocoa Touch,Ios,Abaddressbooksource,我正试图从我的iOS 4通讯录的三个来源(1个MobileMe来源和2个ExchangeGAL来源)中找到人们 NSLog语句始终为ExchangeGAL返回0人,但为MobileMe返回人数 在使用AbAddressBookCopyArrayFallSources(addressBook)从iOS通讯簿中获取所有源之后,我尝试逐源迭代以获取每个源的更多信息。 我使用ABAddressBookCopyArrayFallPeopleInSourceWithSortOrdering是否正确? 将统计

我正试图从我的iOS 4通讯录的三个来源(1个MobileMe来源和2个ExchangeGAL来源)中找到人们
NSLog语句始终为ExchangeGAL返回0人,但为MobileMe返回人数
在使用AbAddressBookCopyArrayFallSources(addressBook)从iOS通讯簿中获取所有源之后,我尝试逐源迭代以获取每个源的更多信息。

我使用ABAddressBookCopyArrayFallPeopleInSourceWithSortOrdering是否正确?
将统计不同地址簿来源中的所有人

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

你期望返回的人真的在你的通讯录里吗?您不应该期望
abAddressBookCopyArrayFallPeopleInSourceWithSortOrdering()
返回整个GAL。这将是一个巨大的过程。您应该只希望它返回一个子集
abAddressBookCopyArrayFallPeople()

尝试使用:

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);
}
ABRecordRef sourceWithType(绝对资源类型mySourceType)
{
ABAddressBookRef addressBook=ABAddressBookCreate();
CFArrayRef sources=abAddressBookCopyArrayFallSources(addressBook);
CFIndex sourceCount=CFArrayGetCount(源);
ABRecordRef resultSource=NULL;
对于(CFIndex i=0;i
您可能会发现这很有帮助:

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