ユーザーがアドレス帳から連絡先の電子メールを選択して、電子メール フィールドに入力するようにします。メールが設定されていない連絡先をすべてスクロールさせたくないので、メールアドレスのある連絡先をフィルタリングしたい。
これは私がこれまでに書いたコードです。誰がメール アドレスを持っていて、誰が持っていないかはわかりますがABPeoplePickerNavigationController
、正しい連絡先だけをリストするように指示することはできませんでした。これを達成することは不可能ですか?つまり、テーブル ビューを使用して独自の連絡先ピッカー クラスを実装する必要がありますか?それとも、このコードに何か問題がありますか?
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];