6

ユーザーがアドレス帳から連絡先の電子メールを選択して、電子メール フィールドに入力するようにします。メールが設定されていない連絡先をすべてスクロールさせたくないので、メールアドレスのある連絡先をフィルタリングしたい。

これは私がこれまでに書いたコードです。誰がメール アドレスを持っていて、誰が持っていないかはわかりますが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];
4

2 に答える 2

1

iOS にこのフィルタリングを行わせる方法があるとは思えません。私もコードでそれを行います。あらゆる種類の電子メール アドレスを探す必要があることに注意してください。取得できる辞書を反復処理する必要があります。これを扱うのは確かに PITA です - 私は以前にやったことがあります - メモリリークがないように注意する必要があります。

私がしていることは、あなたが提案するとおりです-すべての連絡先を自分で繰り返し、次にテーブルを使用してビューをポップし、必要な人の名前を選択させます。関連付けを維持して、どのアドレスがどの名前に関連付けられているかを把握し、システムの電子メール フレームワークを使用して、送信先アドレスを設定します。

于 2012-09-22T22:24:49.377 に答える