Iphone 如何仅获取具有地址字段的联系人

Iphone 如何仅获取具有地址字段的联系人,iphone,objective-c,ios,ios5,Iphone,Objective C,Ios,Ios5,我只想显示那些有地址字段的联系人。我正在使用此代码。。请帮忙 - (ABAddressBookRef)getValidAddress{ ABAddressBookRef allPeople = ABAddressBookCreate(); ABAddressBookRef contactsWithAddress = ABAddressBookCreate(); CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeo

我只想显示那些有地址字段的联系人。我正在使用此代码。。请帮忙

- (ABAddressBookRef)getValidAddress{

    ABAddressBookRef allPeople = ABAddressBookCreate();
    ABAddressBookRef contactsWithAddress = ABAddressBookCreate();
    CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeople(allPeople);
    CFIndex numberOfContacts = ABAddressBookGetPersonCount(allPeople);
    CFErrorRef  anError = NULL; 

    for(int i=0; i<numberOfContacts;i++){
        ABRecordRef aPerson = CFArrayGetValueAtIndex(allContacts, i);
        ABMultiValueRef AddressProperty = ABRecordCopyValue(aPerson, kABPersonAddressProperty);
        if(ABMultiValueGetCount(AddressProperty)>0){
            NSLog(@"this dude has address, he's on the list");
            //ABAddressBookAddRecord(contactsWithEmail, aPerson, &anError);
        }
        else{
            NSLog(@"this guy has no address, removing them from the addressBook");
            ABAddressBookRemoveRecord(contactsWithAddress, aPerson, &anError);
        }

    }

    return contactsWithAddress;
}


- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar
{

    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];

    ABAddressBookRef test = [self getValidAddress];
    [picker setAddressBook:test];

    NSArray* emailProp = [NSArray arrayWithObjects:
    [NSNumber numberWithInt:kABPersonPhoneProperty], 
    [NSNumber numberWithInt:kABPersonEmailProperty],
    [NSNumber numberWithInt:kABPersonBirthdayProperty],
    [NSNumber numberWithInt:kABPersonAddressProperty],
    nil];;
    picker.displayedProperties = emailProp;

    picker.peoplePickerDelegate = self;
    [self presentModalViewController:picker animated:YES];
    //[parentController presentModalViewController:picker animated:YES];

    [picker release];

}
-(ABAddressBookRef)getValidAddress{
ABAddressBookRef allPeople=ABAddressBookCreate();
ABAddressBookRef contactsWithAddress=ABAddressBookCreate();
CFArrayRef allContacts=abAddressBookCopyArrayFallPeople(所有人);
CFIndex numberOfContacts=ABAddressBookGetPersonCount(所有人);
CFErrorRef anError=NULL;
对于(int i=0;i0){
NSLog(@“这家伙有地址,他在名单上”);
//ABAddressBookAddRecord(联系邮件、联系人和错误);
}
否则{
NSLog(@“这家伙没有地址,正在从通讯簿中删除”);
ABAddressBookRemoveRecord(联系人地址、联系人和错误);
}
}
返回联系人地址;
}
-(无效)searchBarBookmarkButtonClicked:(UISearchBar*)搜索栏
{
ABPeoplePickerNavigationController*picker=[[ABPeoplePickerNavigationController alloc]init];
ABAddressBookRef测试=[self-getValidAddress];
[选择器设置地址簿:测试];
NSArray*emailProp=[NSArray阵列及其对象:
[NSNumber numberWithInt:KabbersonPhoneProperty],
[NSNumber numberWithInt:KabbersoneMailProperty],
[NSNumber numberWithInt:KabbersonBirthdayProperty],
[NSNumber numberWithInt:KabPersonalAddressProperty],
零];;
picker.displayedProperties=emailProp;
picker.peoplePickerDelegate=self;
[自我呈现ModalviewController:picker动画:是];
//[parentController presentModalViewController:picker动画:是];
[选择器释放];
}
现在它在picker中显示联系人,他们有地址,但现在我的输出是:

TEST1 44-541541-52 D-551,纽约,TEST2 54-965684-85 j.V 印度大街,TEST3 95-95684-956无,TEST3 20-95684-956无

现在我得到这个输出:

测试1测试2测试2测试2测试2

请帮忙。。。
它显示出重复性

恐怕你运气不好
ABPeoplePickerController
是一个非常有限的类


您必须滚动自己的people picker控制器,并使用通讯簿中的所有记录填充它,这些记录您以前已经迭代并过滤过。

为我工作的代码已经存在。您可以检查地址是否存在,如果不存在,则可以跳过该联系人

为此,您必须在项目和.m文件中导入ABAddressbook框架

祝你好运

您正在前两行“创建”(即复制)两个通讯簿。您应该只维护自己的
ABRecordRef
s数组。