objective-c - 从联系人中获取所有电子邮件地址 (iOS)

标签 objective-c ios contacts

我知道可以拉出一个联系人并查看基于一个联系人的信息。但是有什么方法可以从您为其输入电子邮件地址的联系人那里获取所有电子邮件,然后将其存储在 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/

相关文章:

ios - 我的位置按钮未出现在 View 中(Google map SDK、ios)

iphone - 在以下示例中如何从 NSSArray 元素获取值?

ios - UILabel 高度不会在 viewDidLoad 或 viewWillAppear 中改变

objective-c - 显示来自 NSDocumentDirectory 的照片

Iphone 应用程序无法在设备上正确显示

ios - SpriteKit 中的更新方法无法正确更新时间

ios - 在 iOS7 64 位中添加

android - 如何获取联系人创建时间

iphone - 由于奇怪的内存问题,从联系人中读取电子邮件地址失败

Android查询电话号码获取raw contact ID