1

住所フィールドを持つ連絡先のみを表示したい.私はこのコードを使用しています..助けてください..

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

}

現在、アドレスを持っているピッカーに連絡先が表示されていますが、私の出力は次のとおりです。

TEST1 44-541541-52 D-551、ニューヨーク、TEST2 54-965684-85 jV ストリート インド、TEST3 95-95684-956 NIL、TEST3 20-95684-956 NIL、

今、私はこの出力を得ています:

テスト1 テスト2 テスト2 テスト2

助けてください...重複が表示されます..

4

2 に答える 2

0

運が悪かったのではないかと思います。ABPeoplePickerControllerかなり限られたクラスです。

自分のピープルピッカーコントローラーをロールして、以前に繰り返してフィルター処理したアドレス帳のすべてのレコードを入力する必要があります。

于 2012-08-14T11:57:52.080 に答える
0

私のために働いたコードは私の Answerにあります。アドレスが存在するかどうかを確認できます。存在しない場合は、その連絡先をスキップできます。

このためには、プロジェクトと .m ファイルにも ABAddressbook フレームワークをインポートする必要があります。

幸運 !!

于 2012-08-14T12:03:28.797 に答える