Wie kann ich ABPeoplePickerNavigationController anweisen, nur Kontakte mit einer E-Mail-Adresse aufzulisten?

Ich möchte, dass meine Benutzer ein E-Mail-Feld ausfüllen, indem sie die E-Mail-Adresse eines Kontakts aus dessen Adressbüchern auswählen. Ich möchte nicht, dass alle Kontakte gescrollt werden, für die keine E-Mail-Adressen festgelegt wurden. Daher möchte ich diejenigen filtern, die über E-Mail-Adressen verfügen.

Dies ist der Code, den ich bisher geschrieben habe. Ich kann herausfinden, wer eine E-Mail-Adresse hat und wer nicht, aber ich konnte das nicht sagenABPeoplePickerNavigationController um nur die richtigen Kontakte aufzulisten. Ist dies nicht möglich, muss ich meine eigene Kontaktauswahlklasse mithilfe einer Tabellenansicht implementieren, oder stimmt etwas mit diesem Codeteil nicht?

ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *peopleList = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSLog(@"%ld people exist in the addressBook", ABAddressBookGetPersonCount(addressBook));
for (id peopleRecord in peopleList) {
    ABMultiValueRef mv = ABRecordCopyValue((ABRecordRef)peopleRecord, kABPersonEmailProperty);
    CFIndex numberOfAddresses = ABMultiValueGetCount(mv);
    if(numberOfAddresses == 0) {
        CFErrorRef err;
        ABAddressBookRemoveRecord( addressBook, (ABRecordRef)peopleRecord, &err);
    }
}
[peopleList release];

NSLog(@"%ld people have an email", ABAddressBookGetPersonCount(addressBook));

ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
NSNumber* emailProp = [NSNumber numberWithInt:kABPersonEmailProperty];
[peoplePicker setAddressBook:addressBook];
peoplePicker.displayedProperties = [NSArray arrayWithObject:emailProp];
[peoplePicker setPeoplePickerDelegate:self];
[self presentModalViewController:peoplePicker animated:YES];

Antworten auf die Frage(2)

Ihre Antwort auf die Frage