将新号码添加到 ABAddressBook 中的现有 ABRecord - iPhone

2023-12-05

我正在尝试通过我的应用程序更新地址簿中现有联系人的内容,但不需要用户界面。场景是这样的:

1 用户输入号码和姓名 2 应用程序检查该姓名是否在联系人列表中 3 如果是,则检查该号码是否是该姓名的联系人之一 4 如果没有,则将其添加到该名称中

我已经设法实现步骤 1-3,但我找不到执行步骤 4 的方法。有人可以帮忙吗?

下面是我的代码的样子

...
CFIndex lTotalContactsCount = ABAddressBookGetPersonCount(lAddressBook);
NSArray *people = (NSArray *)ABAddressBookCopyArrayOfAllPeople(lAddressBook );

for (CFIndex i = 0; i < lTotalContactsCount; i++)
{
    ABRecordRef lRef = (ABRecordRef)[people objectAtIndex:i];   

    ...
    // if names match
    {
        ABMutableMultiValueRef lPhoneNumbers = ABRecordCopyValue(lRef, kABPersonPhoneProperty);
        CFIndex lContactPhoneNumberCount = ABMultiValueGetCount(lPhoneNumbers);
        ABRecordID contactID = ABRecordGetRecordID(lRef);

        ...
         // if numbers dont match
        {
                   // THIS BIT IS NOT WOKRING
            CFErrorRef error = NULL; 

            ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
            ABMultiValueAddValueAndLabel(multiPhone, number, (CFStringRef)@"Duplicate", NULL);

        //  ABRecordSetValue(newPerson, kABPersonFirstNameProperty, name, &error);

            //add the number to the contact
            ABRecordSetValue(lRef, kABPersonPhoneProperty, multiPhone,nil);
        //  ABAddressBookAddRecord(lAddressBook, lRef, &error);
            ABAddressBookSave(lAddressBook, &error);
        }

        if( firstName )
            CFRelease(firstName);
        if( lastName )
            CFRelease(lastName);
        if( lPhoneNumbers )
            CFRelease(lPhoneNumbers);

        // no need to search other entries
        if(numberExists)
            break;
    }

今天早上进一步查看 API 后,我设法找到了解决方案。干得好:

// contactId is the ID of the person i need to add a new number to his contacts
// got the id through : ABRecordGetRecordID( ABRecordRef )
ABRecordRef person = ABAddressBookGetPersonWithRecordID(lAddressBook, contactID);
ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutableCopy(lPhoneNumbers);
ABMultiValueAddValueAndLabel(multiPhone, number, (CFStringRef)@"Duplicate", NULL);      
//add the number to the contact
ABRecordSetValue(person, kABPersonPhoneProperty, multiPhone,nil);
ABAddressBookSave(lAddressBook, &error);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将新号码添加到 ABAddressBook 中的现有 ABRecord - iPhone 的相关文章

  • 如何使 RLMResults 可变?

    Realm 文档说RLMResults正在舔NSArray 我有一些从数据库返回的结果 我想将其合并到另一个RLMResults 但它似乎是一成不变的 如何制作RLMResults添加另一个对象RLMResults 或使其可变 或将其转换为
  • 如何使用 AVAssetWriter 将视频裁剪成方形 iOS

    我正在使用 AVAssetWriter 录制视频 我希望能够将视频裁剪成与顶部有偏移的正方形 这是我的代码 NSDictionary videoCleanApertureSettings NSDictionary dictionaryWit
  • 无法运行 iPhone 模拟器 - 文件“日志”无法保存

    iPhone 模拟器无法运行 显示错误消息 文件 Logs 无法保存在 Library 文件夹中 因为 同名文件已存在 当 Logs 目录为空时 模拟器会创建子目录 CoreSimulator App ID 并显示上述消息 它是新的 OS
  • 在应用程序启动期间请求访问照片库

    我正在开发一个应用程序 它可以在某些事件期间自动拍照并将它们直接保存到照片库中 不幸的是 当它运行时 用户可能并不总是看着他们的手机 并且第一次拍摄照片时 它会请求访问照片的权限 有没有办法可以在启动过程中强制执行此请求并将其排除在外 谢谢
  • 应用程序在 iPhone 5c 上冻结在主线程上,但在 iPhone 6s 上则不然

    我正在开发一个带有导航控制器的应用程序 Swift 目标 C 重要的提示 在 iPhone 5c 上测试时 这种冻结发生率为 100 而在 iPhone 6s 上测试时则从未发生过 场景是 转到TableViewController A 触
  • 如何在 sqlite3 数据库中存储音频文件并在 iphone 中播放它们?

    我想在数据库中存储音频文件 任何支持 mp3 wav 和 iphone 的格式 并在 iPhone 上播放它们 知道如何做到这一点吗 我不知道为什么你想将音频文件存储在 SQL 数据库中 但 sqlite3 支持 BLOB 因此 将它们存储
  • 核心数据插入具有现有关系的新数据

    我的核心数据有问题 我有一个看起来像这样的表 用户 与 机架 与 机架项目的关系 我应该如何将新对象插入到具有用户中现有项目对象和现有机架对象的机架项目中 我尝试获取现有对象 predicate NSPredicate predicateW
  • UIView 的 initWithFrame 不起作用?

    我通过 Interfacebuilder 将视图控制器设置为特定视图 但 initWithFrame 没有调用 但 drawRect 正在被调用 当我放置断点时 是的 因为不能保证initWithFrame 将在取消归档 xib 时调用 尝
  • 如何将 XCode 变量传递到资源文件夹中的 HTML 文件?

    我有一个 UIWebView 它从资源文件夹加载本地 HTML 文件 现在 这个 HTML 文件中包含了 Javascript 我的问题是 有没有办法将 XCode 变量传递给加载到 UIWebView 内的 HTML 文件 我可以将其传递
  • 连接广播而不是服务器后AsyncUdpSocket接收数据的小问题

    我的 AsyncUdpSocket 有问题 我曾经连接到服务器 发送一些数据并获得一些响应 现在 由于我不知道服务器的实际地址 我不得不更改代码并将数据发送到广播地址 255 255 255 255 这是我的代码 NSString bcho
  • UITableView/UITableViewCell 点击事件响应?

    我一直在谷歌搜索 试图弄清楚当点击 UITableView 中的一行 或单元格 时会调用什么类型的事件句柄 但一直无法弄清楚 我试图在点击单元格时更改其图像属性 Thanks 点击表行时有两个可能的事件 选择该行和附件视图 通常是 更多详细
  • 在 iPhone 模拟器中设置当前用户位置

    有没有办法在 Xcode 4 上的 iPhone 模拟器中设置当前用户位置 我希望模拟器显示除库比蒂诺之外的其他位置 是的 从模拟器的菜单中选择Debug gt Location gt Custom Location
  • sizeWithFont:constrainedToSize:lineBreakMode:不准确?

    sizeWithFont constrainedToSize lineBreakMode 似乎没有给我返回正确的宽度 执行这些代码后 我看到标签中的部分字符串被切断 这意味着我必须手动添加一些像素到大小 我错过了什么吗 我有一个 UILab
  • 我们可以在 Tiff 文件中添加自定义键或如何在 Tiff 文件的图像属性中添加温度数据

    我想在选定点添加图像的温度数据 它是否有任何预定义的属性 或者我们是否可以在 Tiff 文件中创建自定义 私钥来存储图像的温度数据 Answer 使用 TIFF 库文档在 TIFF 文件中创建您自己的自定义键 在文档中 他提到了如何创建和使
  • 如何在 iPhone 应用程序中运行进程而不阻塞用户界面

    我正在 iPhone 上访问照片库 需要很长时间才能导入我在应用程序中选择的图片 如何在辅助线程上运行该进程 或者我应该使用什么解决方案来不阻塞用户界面 我在这里使用 PerformSelectOnBackground 或 GCD 对示例代
  • NSString 到 Double 问题

    可能很简单 但我不明白 我有一个 NSString50 81114我想把它转换成双 目前我正在使用 string doubleValue 但这是作为50 811140000002这是怎么回事 Disco 由于精度有限double无法存储50
  • 使用 UIImage 和 caf 创建视频文件的问题

    我已经阅读了在互联网上可以找到的所有关于此功能的帖子 并且我在创建视频文件方面取得了一些成功 但我还剩下 3 个问题 而且似乎没有人提到过这一点 我有 3 个问题 视频在某些播放器上无法正常播放 quicktime window 视频只播放
  • 在采取行动之前如何知道几个块是否已经执行完毕?

    我在用着animateWithDuration animations completion 之前移动用户界面的几个元素 大约 4 个元素 removeFromSuperview 叫做 我的问题是 我怎么知道在调用之前所有这些动画都已完成re
  • 从底部加载导航视图控制器

    我有四个 ViewControllers 其中 ViewControllers 使用以下方式加载UINavigationController 我能够一一切换到每个 ViewController 问题是 由于我使用的是 NavigationC
  • NSString 的 UTF8String 的 CFString 等价物是什么?

    今天我陷入了僵化状态 因为我无法将一段简单的 ObjC 代码转换为其等效的 Cpp 代码 我有这个 const UInt8 myBuffer NSString aRequest UTF8String 我正在尝试用以下内容替换它 const

随机推荐

  • 格雷特函数定义

    我想定义一个更大的函数 它从比之前的列表项大的列表项中进行选择 例如 greaters 1 3 2 4 3 4 5 3 4 4 5 greaters 5 10 6 11 7 12 10 11 12 我想出的定义是这样的 greaters O
  • 使用 iPhone SDK 查找 SRV 记录

    在 Windows 或 Mac OS X 终端中 如果您键入 nslookup type SRV xmpp server tcp gmail com 例如 您将收到一堆与不同谷歌聊天服务器相关的 SRV 记录 有谁有这方面的经验并且可能知道
  • 在 Firefox 开发者工具中使用外部编辑器?

    如果我单击带有行号的文件名 script js 100 4 在 Firefox 开发者工具中 我会看到一个集成编辑器 有没有办法打开外部编辑器 在正确的行 例如 VS Code 有一个类似的问题Chrome从 2013 年开始 这还不可能
  • 使用 Scapy 解码基于 UDP 的 RTP

    如何使用 Scapy 2 3 2 解码 和操作 基于 UDP 的 RTP 我有一个名为 rtp pcap 的捕获文件 其中包含到 224 0 1 11 5016 的 RTP 音频流 当您启用 RTP over UDP 协议时 默认关闭 Wi
  • 动作脚本3睡眠?

    我有一个简单的动作脚本函数 var string String TEXT REMOVED var myArray Array string split addEventListener Event ENTER FRAME frameLoop
  • 使用 ASP.net Handler 动态创建 JS 文件

    我有很多客户 我想给他们脚本 所以我想根据他们的客户 ID 创建 JS 文件 这样我就可以返回并直接在客户端执行 客户端可以是任何人 PHP Html ASP net 问题是 当我浏览此链接时 它给了我 JS 字符串 但在客户端 此脚本没有
  • 使用 LINQ 选择数组中最小、最常见的数字

    如果我有一个未排序的数组 其中包含多对相同的数字 我如何找到最常见数字中的最小者 int arr new int 8 6 5 2 5 9 6 9 2 3 unsorted array Array Sort arr I could sort
  • Mobilock 应用程序在 BOOT_COMPLETED 广播之前启动...这怎么可能?

    有一个名为 Mobilock 的信息亭应用程序 这个应用程序的启动速度比我自己的以 BOOT COMPLETED 广播启动的应用程序要快得多 几乎提前了 5 秒 我自己的应用程序具有最高优先级 即整数的最大值 所以这不是优先级的问题 这些人
  • 在 C 中检查变量是字符串还是整数

    我正在编写一个C程序 我必须通过命令行读取参数 如何检查传递给程序的参数是字符串 即字符数组 还是整数 我可以在 C 中使用任何即时调用吗 命令行传递的参数总是字符串 如果你想检查这个字符串是否可以转换为整数 你可以使用strtol cha
  • JPEG 图像中的透明背景

    如何在 JPEG 图像上设置透明背景 这是很多同事的疑问 在 Windows 上使用画图的解决方案是什么 还有哪些其他简单的替代方案 您无法将 JPEG 图像设为透明 您应该使用允许透明的格式 例如 GIF 或 PNG 画图将打开这些文件
  • 无法更改 IOS 上的 .NET MAUI Blazor 启动屏幕

    我尝试遵循有关 NET MAUI 启动画面的所有可用教程 但我无法让我的应用程序显示自定义启动画面 重现问题的步骤 在 PC 上打开 Microsoft Visual Studio 2022 创建新的 NET MAUI Blazor 应用程
  • 有没有办法从 WordPress 的链接生成中排除域

    我有一个在 domain com 上响应的网站 即将x domain com or y domain com应该产生相同的网页 我不知道 是什么 但它是重要的信息 因为我们根据它来跟踪事物 当迁移到 WordPress 时 我们遇到了一个非
  • 未使用 MS_SQL JDBC 为存储过程定义参数 @x

    我正在尝试在方法中使用 SQL Server JDBC 执行存储过程 Connection connection String sp name Map
  • ASP MVC 日期时间验证错误

    在 asp net MVC 5 中 我有一个显示来自 DTO 对象的数据的表单 public class FieldDTO DataType DataType DateTime DisplayFormat ApplyFormatInEdit
  • 使用 GetText 从剪贴板获取文本 - 避免空剪贴板上出现错误

    我正在使用这样的代码从剪贴板获取文本 Dim DataObj As New MSForms DataObject DataObj GetFromClipboard myString DataObj GetText 我使用错误处理来解决剪贴板
  • 如何设置地址簿访问请求警报视图的文本?

    I know that in iOS 6 we should request the access to contacts first like below 但现在我想知道如何在警报视图中添加详细消息 就在警报标题和两个按钮之间 我确实看到
  • 重写成员时违反了继承安全规则 - SecurityRuleSet.Level2

    我有一个继承自 Exception 的类 在 NET 4 中 我开始收到运行时错误 违反继承安全规则 同时重写成员 MyBusinessException GetObjectData System Runtime Serialization
  • Xbox 上的 UWP 应用

    在围绕 Windows 10 的活动和促销期间 我总是看到 UWP 应用程序可以在 Microsoft 系列的所有设备上运行 为了确认这一点 当我在浏览器上浏览 UWP 应用程序并单击以查看应用程序页面的源代码时 我能够看到以下元数据 那
  • Doctrine MongoDB 通过 id 查找

    我正在使用 odm mongo 原则 我必须记录类 class Thing MongoDB Id protected id MongoDB ReferenceOne targetDocument Bundle1 Other protecte
  • 将新号码添加到 ABAddressBook 中的现有 ABRecord - iPhone

    我正在尝试通过我的应用程序更新地址簿中现有联系人的内容 但不需要用户界面 场景是这样的 1 用户输入号码和姓名 2 应用程序检查该姓名是否在联系人列表中 3 如果是 则检查该号码是否是该姓名的联系人之一 4 如果没有 则将其添加到该名称中