我希望我的用户通过从地址簿中选择联系人的电子邮件来填写电子邮件字段.我不希望他们滚动所有未设置电子邮件的联系人,所以我想过滤那些有电子邮件地址的联系人.

这是我到目前为止编写的代码.我可以找出谁有一个电子邮件地址,谁没有,但我不能告诉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];

解决方法

我不相信有办法让iOS进行这种过滤.我也是在代码中做的.请注意,您需要查找各种电子邮件地址 – 您必须遍历您可以获得的字典.使用它是一个PITA肯定 – 我以前做过 – 你必须小心不要有内存泄漏.

我所做的就像你建议的那样 – 我自己遍历所有联系人,然后我用表格弹出一个视图,然后选择他们想要的人的名字.我保持一个关联,所以我知道什么地址与什么名称相关联,然后使用系统电子邮件框架,然后填充发送地址.

ios – 如何告诉ABPeoplePickerNavigationController仅列出具有电子邮件地址的联系人?的更多相关文章

  1. ios – 如何告诉ABPeoplePickerNavigationController仅列出具有电子邮件地址的联系人?

    解决方法我不相信有办法让iOS进行这种过滤.我也是在代码中做的.请注意,您需要查找各种电子邮件地址–您必须遍历您可以获得的字典.使用它是一个PITA肯定–我以前做过–你必须小心不要有内存泄漏.我所做的就像你建议的那样–我自己遍历所有联系人,然后我用表格弹出一个视图,然后选择他们想要的人的名字.我保持一个关联,所以我知道什么地址与什么名称相关联,然后使用系统电子邮件框架,然后填充发送地址.

  2. Swift iOS9新联系人框架 – 如何仅检索具有有效电子邮件地址的CNContact?

    您不能编写自定义谓词来过滤联系人,正如文档所说:“请注意,Contacts框架不支持通用谓词和复合谓词”但是当然你可以“手动”完成它,我给你看一个使用快速枚举的例子:

  3. 如何在Swift中与ABPeoplePickerNavigationController选择联系人?

    如果你不这样做,就不会在课堂上尝试这些方法.从而:>当您调用ABRecordcopyValue时,您的示例方法引用了人.这是你的选择器控制器.我假设你的意思是引用人,ABRecordRef!

  4. swift – 使用Firebase登录时“访问钥匙串时出错”

    PS.对不起,如果我错过任何东西,这是我第一次发布.尝试打开项目目标的功能钥匙串共享.这对我有用KeychainSharing

  5. android – 在Kindle Fire上,是否可以获取用户的电子邮件地址?

    Thisquestion一般会讨论Android设备,但是如果你试图在KindleFire上运行这个代码,你得到的就是用户的名字.有没有办法获得电子邮件地址?对不起,但你完全错了.我以前链接到Google登录对话框,显示KindleFire上存在的所有用户.请遵循以下代码:P/s:要使用GoogleAuthUtil类,可能需要google-oauth-client-1.15.0-rc.jar.

  6. Windows – 获取用户的电子邮件地址?

    有没有办法通过Win32或.NET从Windows中获取用户的电子邮件地址?是否有包含此信息的注册表项或API?

  7. ubuntu – 如何将副本发送到电子邮件帐户中所有传入邮件的另一个电子邮件地址?(后缀)

    (后缀)这是可能的?

  8. ubuntu – 配置Exim转发电子邮件

    我设置了一个Ubuntu10.04VPS来管理sub.example.com,我已经将Exim配置为使用来自LinodeLibrary的thistutorial发送电子邮件.这是有效的,但除了发送电子邮件,我意识到我需要一个非根电子邮件地址(admin@sub.example.com)转发给我(me@gmail.com).我已经阅读了关于这个[1]的Exim文档,我并没有真正得到我应该做的事情(似

  9. 通过PHP向许多用户发送邮件的安全方式

    让我解释一下我的话题.比方说,我正在为一个网上商店/目录创建一个小型的电子商务系统.客户有可能选择,他们是否希望接收通讯.如果他们这样做,那么逻辑上认为通讯应该在通讯形成并准备就绪时立即发送.当然,通过从数据库中获取所有指定的用户电子邮件和循环使用循环邮件功能发送邮件,可以简单的做到这一点,但问题是我被告知这是不好的做法.简单而不便宜的方式是购买互联网服务发送通讯,但是需要PHP程序员呢?

  10. php – 在数据库中存储有关匿名/访客用户的信息的方法有哪些?

    >如果不在数据库中,则外键约束从transaction.customer_ID到customer.customer_ID不再工作>customer_ID与公司party_ID相同>更容易确定每个公司的总销售额等>这会使事情变得混乱,因为公司是自己的客户,而不是其他独特的客户>为每个新的匿名客户生成一个唯一的customer_ID>如果同一个物理用户返回怎么办?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部