使用仅包含电子邮件的联系人显示ABAddressBook

Sno*_*man 6 iphone objective-c ios

我想显示一个只显示带有电子邮件的联系人的ABAddressBook,所以我试过这样的事情:

    ABAddressBookRef addressBook = ABAddressBookCreate();
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
    CFIndex nPeople = ABAddressBookGetPersonCount( addressBook );

    for( CFIndex emailIndex = 0; emailIndex < nPeople; emailIndex++ ) {
        ABRecordRef person = CFArrayGetValueAtIndex( allPeople, emailIndex );
        ABMutableMultiValueRef emailRef=ABRecordCopyValue(person, kABPersonEmailProperty);
        int emailCount = ABMultiValueGetCount(emailRef);
        if(emailCount == 0) {
            ABAddressBookRemoveRecord(addressBook, person, NULL);
        }   
    }
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.addressBook = addressBook;
    picker.peoplePickerDelegate = self;
    [self presentModalViewController:picker animated:YES];
Run Code Online (Sandbox Code Playgroud)

控制器显示,但显示所有联系人,如果我选择没有电子邮件的联系人,我会崩溃.如果我调用ABAddressBookSave(),它会删除所有带有电子邮件的联系人,但这是一个永久性更改,甚至会从系统联系人中删除它们.这样做的正确方法是什么?

小智 0

您是否考虑过创建一个临时地址簿并在其中填充具有电子邮件地址的联系人?