我知道可以拉出一个联系人并查看基于一个联系人的信息。但是有什么方法可以从您为其输入电子邮件地址的联系人那里获取所有电子邮件,然后将其存储在 NSArray 中? 这是我第一次与联系人打交道,所以我对此了解不多。
最佳答案
是的,你可以做到这一点。您想要这样做似乎很可疑(您为什么需要这些信息?),但这并不难。
您可以使用 ABAddressBookCopyArrayOfAllPeople
获取所有人员的 CFArrayRef,然后您可以使用 ABRecordCopyValue
查询每个人的 kABPersonEmailProperty
。代码看起来像这样(未经测试):
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *allEmails = [[NSMutableArray alloc] initWithCapacity:CFArrayGetCount(people)];
for (CFIndex i = 0; i < CFArrayGetCount(people); i++) {
ABRecordRef person = CFArrayGetValueAtIndex(people, i);
ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
for (CFIndex j=0; j < ABMultiValueGetCount(emails); j++) {
NSString* email = (NSString*)ABMultiValueCopyValueAtIndex(emails, j);
[allEmails addObject:email];
[email release];
}
CFRelease(emails);
}
CFRelease(addressBook);
CFRelease(people);
(内存分配可能有点偏差;自从我开发 Cocoa/Core Foundation 代码以来已经有一段时间了。)
但严肃地说,质疑你为什么要这样做。很有可能有更好的解决方案,只需使用 Apple 提供的 API 在适当的时间显示联系人选择器。
关于objective-c - 从联系人中获取所有电子邮件地址 (iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865436/