我正在尝试显示 ABAddressBook 的模式,其中仅包含注册了电子邮件的联系人。我如何实现这一目标?
我尝试了这段代码:
- (IBAction)getContact {
// creating the picker
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
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) {
CFErrorRef error = nil;
ABAddressBookRemoveRecord(addressBook, person, &error);
if (error) NSLog(@"Error: %@", error);
}
}
picker.addressBook = addressBook;
picker.peoplePickerDelegate = self;
[self presentModalViewController:picker animated:YES];
}
该列表显示了我的所有联系人,但“已删除”的联系人显示为“无姓名”,而有姓名的联系人则有真实的电子邮件。
最佳答案
我已经设法创建另一个解决方案...
我在数组中添加了至少包含一封电子邮件的联系人...而不是查看当前地址簿并删除其中没有任何电子邮件的联系人的解决方案。这是代码:
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) {
CFErrorRef error = nil;
ABAddressBookRemoveRecord(addressBook, person, &error);
if (error) NSLog(@"Error: %@", error);
} else {
ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
NSString *email = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 0);
NSString *name = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
if (name) {
NSMutableDictionary *contactDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
name, @"name",
email, @"email",
nil];
[self.contactsArray addObject:contactDict];
}
}
}
关于objective-c - 弹出 ABAddressBook 模式,仅包含有电子邮件的联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13861454/