Iphone 如何仅显示具有地址字段的联系人

Iphone 如何仅显示具有地址字段的联系人,iphone,Iphone,我只想显示那些有地址字段的联系人。根据所有数据计数,我在tableview中得到了行数。有人能帮我吗 -(void)showPeoplePickerController { ABAddressBookRef tempAddressBook = ABAddressBookCreate(); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(tempAddressBook); CFIndex nPeople =

我只想显示那些有地址字段的联系人。根据所有数据计数,我在tableview中得到了行数。有人能帮我吗

-(void)showPeoplePickerController
{

    ABAddressBookRef tempAddressBook = ABAddressBookCreate();
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(tempAddressBook);
    CFIndex nPeople = ABAddressBookGetPersonCount(tempAddressBook);

    for(NSUInteger i=0; i<nPeople; i++)
    {

        ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);

        CFStringRef address;
        NSDictionary *add;
        ABMutableMultiValueRef multi = ABRecordCopyValue(ref, kABPersonAddressProperty); 
        NSLog(@" count is.. %ld",ABMultiValueGetCount(multi));
        if(ABMultiValueGetCount(multi)==0)
        {
            ABAddressBookRemoveRecord(tempAddressBook, ref, NULL);

        }
        for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++) 
        {           
            address = ABMultiValueCopyValueAtIndex(multi, i); 
            add=(NSDictionary *)address;
            NSLog(@"add is :- %@",add);

        } 

    }
    allPeople = ABAddressBookCopyArrayOfAllPeople(tempAddressBook);
    nPeople = ABAddressBookGetPersonCount(tempAddressBook);
    NSLog(@" No Of People ... %ld",nPeople);
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController      alloc]init];

    picker.peoplePickerDelegate = self;
    picker.addressBook =tempAddressBook;
//    [picker.searchDisplayController.searchResultsTableView numberOfRowsInSection:2];
    [self presentModalViewController:picker animated:YES];
    [picker release]; 
}
-(无效)showPeoplePickerController
{
ABAddressBookRef tempAddressBook=ABAddressBookCreate();
CFArrayRef allPeople=abAddressBookCopyArrayFallPeople(tempAddressBook);
CFIndex nPeople=ABAddressBookGetPersonCount(tempAddressBook);

对于(i=0;i整数),我遇到了完全相同的问题。我最后做了以下操作来过滤通讯录:

// Get Copy of the address book.
ABAddressBookRef addressBook = ABAddressBookCreate();
// Get all persons in addressbook
NSArray * allPeople = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray * filteredPeople = [[[NSMutableArray alloc]init]autorelease];
int i;
for (i = 0; i < [allPeople count]; i++) {
    // Get the actual person 
    ABRecordRef record = [allPeople objectAtIndex:i];
    bool gotAddress = NO;

    // Get the address properties.
    ABMutableMultiValueRef multiValue = ABRecordCopyValue(record, kABPersonAddressProperty);

    for(CFIndex j=0;j<ABMultiValueGetCount(multiValue);j++)
    {
        CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(multiValue, j);
        CFStringRef street = CFDictionaryGetValue(dict, kABPersonAddressStreetKey);
        CFStringRef zip = CFDictionaryGetValue(dict, kABPersonAddressZIPKey);
        CFStringRef city = CFDictionaryGetValue(dict, kABPersonAddressCityKey);
        CFRelease(dict);

        if(street != nil || zip != nil || city != nil)
            gotAddress = YES;
     }

    if(gotAddress){
        [filteredPeopleWithAddress addObject:record]; 
    }
}
//获取地址簿的副本。
ABAddressBookRef addressBook=ABAddressBookCreate();
//让所有人都进入通讯录
NSArray*allPeople=(NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray*filteredPeople=[[NSMutableArray alloc]init]autorelease];
int i;
对于(i=0;i<[所有人计数];i++){
//找到真实的人
ABRecordRef记录=[所有人反对索引:i];
bool gotAddress=否;
//获取地址属性。
ABMutableMultiValueRef multiValue=ABRecordCopyValue(记录,KabPersonalAddressProperty);

对于(CFIndex j=0;JJ您是否正确获取了地址的所有值?我的问题是我可以筛选所有地址,但表视图中的行数与默认通讯簿中的行数相同。并且我的数据重复。@PanktiPatel我遇到了同样的问题。您能解决吗?谢谢您的回复。但我的问题是我可以筛选所有地址,但没有行数表视图中的s与默认通讯簿的行数相同。并且我的数据重复。对不起,我不明白你的意思?!