访问 iPhone 地址簿中的人员信息

2024-03-01

我需要让用户有机会从地址簿中选择电话号码,所以我以苹果手册为例。但它只需要第一个号码,我如何让用户可以选择地址簿中的一个号码。

- (IBAction)adressBook:(UIButton *)sender {
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;

    [self presentModalViewController:picker animated:YES];
}

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
    [self dismissModalViewControllerAnimated:YES];
}

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person {

    [self displayPerson:person];
    [self dismissModalViewControllerAnimated:YES];

    return NO;
}

- (void)displayPerson:(ABRecordRef)person {

    NSString* phone = nil;
    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,
                                                 kABPersonPhoneProperty);
    if (ABMultiValueGetCount(phoneNumbers) > 0) {
        phone = (__bridge_transfer NSString*)
        ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
    } else {
        phone = @"[None]";
    }
    self.telNumber.text = phone;
    CFRelease(phoneNumbers);
}

我用它来显示电话号码列表,以便我的用户可以选择一个:

- (IBAction)getContact:(id)sender
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;
    picker.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]];
    [self presentViewController:picker animated:YES completion:nil];
}

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{    
    // ensure user picked a phone property
    if(property == kABPersonPhoneProperty)
    {
        ABMultiValueRef phone = ABRecordCopyValue(person, property);
        self.contactTextField.text = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phone, ABMultiValueGetIndexForIdentifier(phone, identifier));

        [self dismissModalViewControllerAnimated:YES];
    }
    else
        /* Display message if selection is not a phone number */

    return NO;
}

Edit:针对 iOS 7 和 iOS 8 进行了更新

// Delegate Method for iOS 7
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{    
    // ensure user picked a phone property
    if(property == kABPersonPhoneProperty)
    {
        ABMultiValueRef phone = ABRecordCopyValue(person, property);
        self.contactTextField.text = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phone, ABMultiValueGetIndexForIdentifier(phone, identifier));

        [self dismissViewControllerAnimated:YES completion:nil];
    }
    else
        /* Display message if selection is not a phone number */

    return NO;
}

// Delegate Method for iOS 8
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
    // Call the delegate method for iOS 7
    [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person property:property identifier:identifier];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问 iPhone 地址簿中的人员信息 的相关文章

  • 学习目标-C。使用 Xcode 3.2.1。错误是什么:程序收到信号:“EXC_ARITHMETIC”

    我正在使用 Stephen Kochan 的优秀著作 Programming in Objective C 2 0 来学习 Objective C 我也是 Xcode 新手 到目前为止 我的所有练习都运行良好 但是当我运行第 153 页上的
  • 如何创建一个仅接收一次信号,然后自行取消订阅/释放的 ReactiveCocoa 订阅者?

    我目前正在注册一个属性信号的订阅者 如下所示 RACAble self test subscribeNext id x NSLog signal fired 默认功能是每次 self test 更改时都会触发 但我只想触发一次 然后取消订阅
  • Objective c:如何只删除目录下的所有文件但保留目录本身

    我发现下面的代码可以删除objective c中的文件 但我只想删除目录下的所有文件Caches并保留目录Caches itself 有人可以建议这样做的方法吗 Thanks NSFileManager filemgr filemgr NS
  • 应用因广告标识符 (IDFA) 被拒绝

    我的申请因以下原因被拒绝 您和您的应用程序 以及与您有联系的任何第三方 签订广告服务合同 可以使用广告标识符 以及通过使用广告获得的任何信息 标识符 仅用于服务广告的目的 如果一个用户 重置广告标识符 则您同意不合并 直接或间接关联 链接或
  • 如何创建一个 NSMutableArray 并为其分配一个特定的对象?

    我刚刚开始接触 Obj C 并且希望创建一个 MKAnnotations 数组 我已经创建了名为的 MKAnnotation 类TruckLocation其中包含名称 描述 纬度和经度 这是到目前为止我所拥有的数组 NSMutableArr
  • 设置使用 iPhone 相机拍摄的图像的类型

    如果我们使用 iPhone 相机拍摄照片 图像将默认以 JPEG 格式保存 我想以其他格式 例如 PNG 保存捕获的图像 是否可以 当我们从应用程序调用 iPhone 相机时 是否可以通过代码执行此操作 我们可以设置捕获图片后必须保存的图像
  • 在 UITableView 中设置滚动位置

    我有一个应用程序 其工作方式与 iPhone 的 联系人 应用程序的工作方式有些相似 当我们添加新的联系人时 用户将被定向到包含联系人信息的仅查看屏幕 如果我们从导航栏中选择 所有联系人 用户将导航到查看最近添加的联系人的所有联系人列表 我
  • 应用程序在第二次运行 nsnull 计数的循环时崩溃

    我有一个循环 第一次运行正常 但第二次循环时我得到 NSNull count unrecognized selector sent to instance 0x3a094a70 Terminating app due to uncaught
  • prepareForSegue 和代表

    我有一个有两个 segue 的应用程序 在其中一个 Segue 中 当前视图控制器成为委托 而另一个则不是 void prepareForSegue UIStoryboardSegue segue sender id sender if s
  • UITextField 字体大小在开始或停止输入字符时发生变化

    我见过很多线程 但没有找到解决这个问题的任何具体解决方案 我使用 XIB 创建了 UITextfield 尚未以编程方式对该字段执行任何操作 一旦我开始打字 文本字段的字体就会改变 一旦我将焦点移出文本字段 并且随着键盘消失 字体大小就会减
  • 在 Objective C 中使用下划线作为属性名称前缀 [重复]

    这个问题在这里已经有答案了 我以前避免在变量名中使用下划线 这可能是我大学 Java 时代的遗留下来的 因此 当我在 Objective C 中定义属性时 我自然会这样做 In the header interface Whatever N
  • 使用 Parse.com 上传视频

    我是解析新手 正在尝试保存视频并将其上传到云端 这是我正在使用的代码 但是当调用 didButtonAction 时 它不断收到错误 我相信问题出在将视频保存为文件时 但我不知道如何解决这个问题 先感谢您 void imagePickerC
  • iphone:通过代码获取目标设置中的用户定义变量?

    我的项目有多个目标 每个目标都有自己的目标Class用于设置内容的文件 我想存储它Class目标设置中的名称 Info plist或目标的建筑物设置 这样我就可以根据此设置定义每个目标中需要使用哪个类 根据这个问题 https stacko
  • 自动布局:Y 位置为两个值中的最大值

    我有一个按钮 play Button 和两个 UIView myView 1 和 myView 2 它们的位置在执行过程中可能会发生变化 我希望 playButton 的顶部比 UIView 1 的底部或 UIView 2 的底部低 10
  • Swift 3 '[UIApplicationLaunchOptionsKey:任意]?'无法转换为 '[String : NSString]'

    我有一个 TVOS 应用程序已从 Swift 2 转换为 Swift 3 但出现以下错误 我不确定如何让它安静下来 UIApplicationLaunchOptionsKey 任意 无法转换为 String NSString 它出现在这段代
  • 编写支持 iOS 3.1.3 和 iOS 4.x 的 iOS 应用程序时的陷阱

    我想编写一个可以在 iOS 3 1 3 到 iOS 4 1 上运行的应用程序 我知道如何设置部署目标和基础 SDK 阅读 Apple 文档后 它很大程度上依赖于检查类是否可用和 或实例是否响应特定选择器 现在我的问题是 如果 Apple 从
  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • 为什么单个 Vec4 乘法会大大减慢我的 ogl es 2 片段着色器的速度?

    我正在为 iOS 设备编写 2D OpenGL 游戏 现在 我正在研究 iPad 第一代 上的性能 该游戏有 ogl 1 1 和 2 0 的代码路径 我可以通过 define 使用 ogl 2 0 时 分析器告诉我 我的渲染器利用率 相当稳
  • Facebook oauth/access_token 丢失

    不知道我是否错过了什么 但就这样 我正在尝试为我的应用程序获取 access token 以便它可以在 facebook 上查找某些公共群组的事件 而无需用户登录 我试图从中获取 access token 这将返回一个字符串 access
  • 应用程序图标未刷新

    我更改了新版本应用程序中的图标图像 并且我在设备中安装了旧版本应用程序 然后我安装了新版本 它在 iOS 5 中运行良好 但在 iOS 6 中 图标没有刷新 它仍然显示旧版本图标 徽标 如果没有安装旧版本应用程序 该设备在 iOS 5 和

随机推荐

  • Shell 脚本参数[重复]

    这个问题在这里已经有答案了 解析 shell 脚本命令中的参数然后验证它的最佳方法是什么 例如bash someScript sh p
  • 以 2 为底的对数刻度

    我想使用对数刻度绘制以下几对点 import matplotlib pyplot as plt f ax plt subplots 1 xdata 256 512 1024 2048 ydata 1 2 30 150 ax scatter
  • “可能会损失精度”是 Java 发疯了还是我遗漏了一些东西?

    AFAIK 当我不应该出现 精度损失 错误时 我却收到了 精度损失 错误 这是一个实例变量 byte move 0 这发生在此类的方法中 this move this move lt lt 4 byte Guy moven indexOf
  • 将 Unicode Emoji 正确读入 R

    我有一组来自 Facebook 的评论 通过 Sprinkr 等系统拉取 其中包含文本和表情符号 我尝试在 R 中对它们进行各种分析 但在正确提取表情符号字符方面遇到了困难 例如 我有一个 csv 以 UTF 8 编码 其消息行包含如下内容
  • 如何使用asp.net core blazor web assembly显示google adsense广告

    我有一个在 blazor 上运行的项目 我想在 blazor 上添加 google adsense 广告 但我找不到任何在 blazor 上运行 google 广告的解决方案 请帮我设置广告 看看这个视频 https www youtube
  • mkdir() 说没有这样的目录并失败?

    我可能做了一些非常简单的错误 但是当我尝试创建一个目录 使用刚刚执行的插入变量作为最后一个文件夹名称 时 我收到错误 警告 mkdir function mkdir home blah blah 中没有这样的文件或目录 与代码 if is
  • gdb:无法找到新线程:系统更新后出现一般错误

    我正在 ARM 板上运行基于 OpenEmbedded 的 Linux 我的应用程序正在其中运行 我曾经运行内核 2 6 35 gdb 6 8 和 gcc 4 3 最近我将系统更新到内核2 6 37 gdb 7 4 也尝试过7 3 和gcc
  • 如何在 Visual Studio Code 中创建多个光标

    在 VS Code 中创建多个光标的键盘快捷键是什么 Press Alt and click This works on Windows and Linux and it should work on Mac too Visual Stud
  • lambda 和成员函数指针的区别

    在我的回答中here https stackoverflow com a 74078452 11998382 巴里指出最好打电话views transform Planter getPlants 因为views transform Plan
  • 派生 Serde 的 Serialize 或 Deserialize 强制泛型类型可序列化,尽管它不需要

    My type A 它可以包含任何实现trait Trait 是可序列化的 尽管实现该特征的类型Trait也许不是 就我而言 它不可能 它是一个私有非对称密钥 extern crate serde macro use extern crat
  • 梯度下降和牛顿梯度下降有什么区别?

    我明白梯度下降的作用 基本上 它试图通过缓慢地沿着曲线移动来走向局部最优解 我想了解普通梯度下降法和牛顿法之间的实际区别是什么 我从维基百科上读到了这样一句话 牛顿方法使用曲率信息来采取更直接的路线 这直观上意味着什么 在局部最小值 或最大
  • 如何在 Java 中将 long 变量更改为时间戳?

    如何将长整型变量更改为时间戳变量 我可以将其转换为字符串 但我需要将其转换为时间戳才能在数据库中使用它 Timestamp 扩展了 java util Date 并且它有一个接受 long 的构造函数 像这样 import java sql
  • 如何在android中注册低电量广播接收器?

    我想注册低电量广播 如果电池状态达到某种程度 我想收到警报 如果您有任何想法请帮助我 您需要注册一个BroadcastReceiver for ACTION BATTERY LOW http developer android com re
  • Mathematica:未评估、延迟、保留、HoldForm、HoldAllComplete、等等

    我对所有旨在以某种方式阻止评估的内置 Mathematica 函数感到困惑 Unevaluated Defer Hold 以及超过六种形式Hold Mathematica 文档只是单独解释每个函数 而没有解释为什么选择其中一个函数 谁能对所
  • 在 ECMA 第 3 阶段使用提案在统计上是否安全?

    背景 我指的是 操作员 许多人喜欢并支持执行以下操作的想法 const obj hello 1 const obj2 world 2 obj Problem 与典型的语法相比 我个人更喜欢这种语法Object assign但最近当我开始在我
  • 如何使用 jQuery .ajax 来执行我的表单操作

    我改变了 php 和 jQuery 的编码风格 但是我的注册 reg form company bind submit function fancybox showActivity ajax type POST cache false ur
  • jQuery:调用后更改插件选项

    我自己制作了一个插件 用于在使用 jquery ui 对话框时设置一些东西 而不是调用 popup dialog options 我用这个 popup dialogPlugin options 并且dialogPlugin会调用 dialo
  • 将存储过程输入参数分配给局部变量是否有助于优化查询?

    我有一个需要 5 个输入参数的存储过程 该过程有点复杂 大约需要 2 分钟才能执行 我正在优化查询 所以 我的问题是 将输入参数分配给局部变量然后在过程中使用局部变量是否总是有帮助 如果是这样 它有什么帮助 我不会尝试解释参数嗅探的完整细节
  • 在 Go 中实现 Merkle 树数据结构

    我目前正在尝试在 Go 中实现默克尔树数据结构 基本上 我的最终目标是存储一小组结构化数据 最大 10MB 并允许该 数据库 轻松与分布在网络上的其他节点同步 请参阅相关资料 我已经在 Node 中相当有效地实现了这一点 因为没有类型检查
  • 访问 iPhone 地址簿中的人员信息

    我需要让用户有机会从地址簿中选择电话号码 所以我以苹果手册为例 但它只需要第一个号码 我如何让用户可以选择地址簿中的一个号码 IBAction adressBook UIButton sender ABPeoplePickerNavigat