首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何更新CNContact?获取CNErrorDomain Code=2

要更新CNContact,可以按照以下步骤进行操作:

  1. 导入Contacts框架:在代码文件的开头添加import Contacts语句,以便使用Contacts框架提供的类和方法。
  2. 请求访问联系人权限:在Info.plist文件中添加对联系人的访问权限描述,例如添加NSContactsUsageDescription键,并提供一个描述字符串。然后,在适当的地方调用CNContactStorerequestAccess(for:completionHandler:)方法来请求访问联系人权限。
  3. 创建CNMutableContact对象:使用CNMutableContact类创建一个可变的联系人对象,该对象可以进行修改。
  4. 设置联系人属性:使用CNMutableContact对象的各种属性来设置联系人的信息,例如姓名、电话号码、电子邮件等。可以使用setValue(_:forKey:)方法来设置属性的值。
  5. 更新联系人:使用CNContactStoresave(_:to:completion:)方法将修改后的联系人保存到联系人库中。需要提供要保存的CNMutableContact对象和一个CNContactStore对象。

以下是一个示例代码,演示如何更新CNContact:

代码语言:swift
复制
import Contacts

func updateContact() {
    let store = CNContactStore()
    
    store.requestAccess(for: .contacts) { (granted, error) in
        if granted {
            let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
            let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch as [CNKeyDescriptor])
            
            do {
                try store.enumerateContacts(with: fetchRequest, usingBlock: { (contact, stop) in
                    if contact.givenName == "John" && contact.familyName == "Doe" {
                        let mutableContact = contact.mutableCopy() as! CNMutableContact
                        mutableContact.phoneNumbers = [CNLabeledValue(label: CNLabelPhoneNumberMain, value: CNPhoneNumber(stringValue: "1234567890"))]
                        
                        let saveRequest = CNSaveRequest()
                        saveRequest.update(mutableContact)
                        
                        do {
                            try store.execute(saveRequest)
                            print("Contact updated successfully")
                        } catch {
                            print("Failed to update contact: \(error.localizedDescription)")
                        }
                        
                        stop.pointee = true
                    }
                })
            } catch {
                print("Failed to fetch contacts: \(error.localizedDescription)")
            }
        } else {
            print("Access to contacts denied")
        }
    }
}

在上述示例中,我们首先请求访问联系人权限,然后使用CNContactFetchRequest获取联系人列表。接下来,我们遍历联系人列表,找到要更新的联系人(这里假设要更新的联系人是名为"John Doe"的联系人),创建一个可变的联系人对象,并将其电话号码设置为"1234567890"。最后,我们使用CNSaveRequest将修改后的联系人保存到联系人库中。

请注意,上述示例仅演示了如何更新联系人的电话号码。根据实际需求,您可能需要更新其他属性,例如电子邮件、地址等。

关于CNErrorDomain Code=2的错误,它表示无法保存联系人。可能的原因包括权限被拒绝、联系人不存在等。您可以根据具体情况进行错误处理。

腾讯云没有直接相关的产品和产品介绍链接地址,因此无法提供相关推荐。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何通过 ASWebAuthenticationSession 获取身份验证 code

这需要使用 ASWebAuthenticationSession 获取身份验证 code 码。 网站登录身份验证逻辑: 一些网站作为一种服务提供了一种用于验证用户身份的安全机制。...2. 不集成 SDK 打开浏览器登录 ---- 你可以通过使用指向身份验证网页的 URL 初始化实例来在应用程序中使用网络身份验证服务。 该页面可以是你维护的页面,也可以是由第三方操作的页面。...通过打开浏览器登录并获取身份验证 code 码,可以分为两种情况: 一种情况是在 App 内部打开浏览器获取身份验证 一种是打开手机自带浏览器获取身份验证 尝试第一种情况之后 GitHub 和 Apple...▐ 3.3 获取身份验证 code 码 func oauthLogin(type: String) { // val GitHub、Google、SignInWithApple let..." 客户端 ID:client_id = "服务器配置" 回调中的 url 包含我们所需要的身份验证 code 码,需要层层解析获取 code

1.6K20
  • iOS9系列专题五——全新的联系人与联系人UI框架

    至于AddressBookFramework的相关api如何繁琐,在以前的博客中有记录,地址如下: 联系人信息相关编程:http://my.oschina.net/u/2340880/blog/407347...];     birthday.day=7;     birthday.month=5;     birthday.year=1992;     contact.birthday=birthday; 2、...(void)addGroup:(CNMutableGroup *)group toContainerWithIdentifier:(nullable NSString *)identifier; //更新一组联系人...三、获取格式化的联系人信息 iOS9中,ContactFramework也为开发者提供了非常方便的格式化信息的方法,还拿我们上面创建的联系人对象举例: 1、获取格式化的联系人姓名     NSString...(10_11, 9_0); 2获取格式化的联系人地址     NSString * foematter =[CNPostalAddressFormatter stringFromPostalAddress

    91140

    【cocos2d-x】尝鲜 Cocos Code IDE(不断更新)

    Cocos Code IDE 是一个基于 Eclipse 的跨平台 IDE ,专门为 cocos2d lua & js 开发者准备,通过此工具。...已实现的功能(1.0-alpha): 简单地创建 cocos2d lua & js project 提供 cocos2d lua & js 代码提示 能够方便地在iOS/Mac/Android/Windows...保存代码后不须要重新启动游戏就能够看到修改后的效果 暂未实现的功能(1.0-alpha): 将project打包成 ipa/apk 与现有的编辑器(如CocoStudio等)集成 不会支持的特性 Code...开发 cocos lua binding 游戏请下载基于cocos2d-x 3.0rc0的改动版 ( 主站下载(国内较慢) | 国内镜像(较快) ) 开发 cocos js binding 游戏请下载基于...cocos2d-js alpha 的改动版 ( 主站下载(国内较慢) | 国内镜像(较快)) 额外需求 假设要在 iOS Simulator 上调试,须要 保证你的 Mac 上安装了 iOS Simulator

    74720

    VM系列振弦采集模块如何更新固件获取更多功能

    VM系列振弦采集模块如何更新固件获取更多功能固件升级更新固件存在一定风险, 可能导致设备无法使用,请慎重操作。BL4VM 是预置于 VM 系列振弦模块内的一段程序,可以完成基于 UART 的固件下载。...( 2)固件程序文件 从网站下载需要的固件程序文件,扩展名为 hwf( 3)固件下载工具 从网站下载 BLDown.exe 程序2.开始固件更新( 1)加载固件文件打开 BLDown.exe,点击【程序文件...图片( 2)选择端口开始下载选择与模块连接的 COM 端口,通讯速率保持默认值 115200bps。将模块与 COM 端口连接并保持模块为未上电状态。...增加了电子标签信息读取指令$RDDT=1,2。...有了这个电子标签,所有的振弦采集仪都直接可以读取传感器的所有信息(传感器型号、量程、K值、编号等,如厂商 品牌: 型号: 类别:应变计 量程:0.000-1500.000uE 编号:206012 线长:2M

    32550

    如何在Power BI里获取并显示最新更新日期?

    对于Power BI使用者来说,报告最后更新的日期时间是个挺重要的信息。在报告中一般显示在四个边角处,如下图所示。...通过Power Query 可以轻松获取数据刷新最后时间戳,并生成一个单列单行的独立表格。下面介绍三种方式。...这种方法也有弊端,即实行冬夏令时的国家地区,时差是不固定的,每年需要调整2次。 方法三 调用接口 通过网站(如http://worldclockapi.com/)接口,生成固定统一的时间。...首先在Power Qury 新建一个空白查询,然后点击查询编辑器,输入以下代码,就会创建一个生成最新更新时间日期的函数查询。...最后更新时间 = "报告最后更新时间" & UNICHAR ( 10 ) & FORMAT ( VALUES ( '最后更新时间表'[时间] ), "dd/mm/yyyy hh:mm:ss" )

    4.8K20

    React进阶(2)-上手实践Redux-如何获取store的数据

    Store,他们彼此之间的关系对于写Redux是非常重要的,宏观上讲:也可以将Redux=reducer+Flux的组合,代码就是文字描述的最佳的体现,解释 你将在本文学习到 编写Redux的的基本流程 如何获取...store中公共的数据,并展示到页面上 如何更改store的公共数据,实现组件的数据与store的同步更新 ....更多的细节见下文 下面就一起来编写Redux代码的,以下是最终实现的效果图,添加,...命令行终端下安装redux第三方库 yarn add redux 2....组件内如何获取store中数据,通过调用getState方法获取store中的数据,该方法能够获取到store上存储的所有状态,该方法放置的位置是在constructor函数里面 this.state...store的数据,是通过getState方法进行获取store中的所有状态 那么如何保持页面的组件与store数据同步更新?

    1.5K10

    React进阶(2)-上手实践Redux-如何获取store的数据

    Store,他们彼此之间的关系对于写Redux是非常重要的,宏观上讲:也可以将Redux=reducer+Flux的组合,代码就是文字描述的最佳的体现,解释 你将在本文学习到 编写Redux的的基本流程 如何获取...store中公共的数据,并展示到页面上 如何更改store的公共数据,实现组件的数据与store的同步更新 ....更多的细节见下文 下面就一起来编写Redux代码的,以下是最终实现的效果图,添加,删除列表操作...命令行终端下安装redux第三方库 yarn add redux 2....组件内如何获取store中数据,通过调用getState方法获取store中的数据,该方法能够获取到store上存储的所有状态,该方法放置的位置是在constructor函数里面 this.state...结语 本文并不是什么高大上的内容,主要是对学习Redux的一个小小的初探 用几句简单归纳下:组件如何获取store中的数据 安装redux,然后从redux中引入createStore这个方法,并调用它

    2.3K20

    如何利用Struts2漏洞绕过防火墙获取Root权限

    本文我要分享的是关于Apache struts2 CVE-2013–2251漏洞的,由于该漏洞可以导致远程代码执行,曾一度被广泛滥用。...此次测试中,我不仅绕过了WAF防火墙实现远程代码执行,还利用了某Linux提权漏洞获取了目标服务器的root管理控制权。...SSH方式获取shell 好吧,接下来,我就来尝试远程管理权限获取。我使用了反向SSH隧道和公钥身份验证进行了尝试,这种方式,允许SSH用户无需输入密码即可登录。...第一步,获取目标服务器的id_rsa.pub文件: ? 第二步,把authorized_keys文件复制到我的AWS测试服务器中: ?...好吧,以上就是我利用apache strut 2漏洞,绕过WAF并结合某Linux提权漏洞实现的一次渗透测试。没有高大上的技巧,仅当思路拓展,不足之处,大牛多多包涵。

    1.5K40

    Spring Cloud 2.x系列之如何获取配置中心的配置

    如何获取配置中心的配置 在Spring Cloud 2.x系列之配置中心这一篇博文里学习了如何git获取配置文件。大概的流程可以用下图来概括。...Spring Cloud 2.x系列之配置中心这篇博文说的是ConfigServer,本篇将和大家看看如何编写一个ConfigClient从Config Server获取配置。...2、 创建maven项目sc-config-client,对应的pom.xml如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:...getConfigFromGit() { Map result = new HashMap(); result.put("code...然后验证一下config sever是否启动成功 方式一:访问注册中心,可以看到configsever已经注册到注册中心了 方式二:访问配置文件对应的路径看看是否可以获取配置文件,如果能获取到说明启动成功

    40920

    七、Apache Commons Configuration2.x如何实现文件热加载热更新

    比如某个活动开始与否是由某个值决定的,而线上需要在不停机、不重启情况打开此开关,这就需要文件热加载、热更新作为基础能力提供支撑。...---- 正文 在1.x版本的时候,我演示过热加载、热更新的示例,你可以移步此处查看,它是通过ReloadingStrategy接口来实现的。...而2.x版本同样的完全推翻了这一套API,改而设计了一套全新的、耦合度更低的API方式,更加灵活的来实现Reloading重新加载的能力,这边是接下来的主要内容。...这就是直接使用ReloadingDetector接口的案例,能够告诉你文件是否已经改变过,让你来决定如何处理,一切都是手动的。...Commons Configuration2.x实现文件的热加载就介绍到这了,因为它比较实用,相信对你工作上也能有所帮助。

    1.5K10

    如何禁止WordPress版本、主题和插件的自动更新2种方法

    define( 'WP_AUTO_UPDATE_CORE', false ); 以上代码将禁用 WordPress 所有的自动更新。...这里我们可以进行统一设置,比如禁用所有的更新,或者针对 WordPress 版本、WordPress 插件、WordPress 主题、WordPress 翻译进行启用/禁用自动更新,手动更新和禁止更新等操作...2、插件选项。可以针对某一款 WordPress 插件进行操作,如允许或禁止该插件更新。 3、主题选项。可以针对某款 WordPress 主题进行操作,如允许或禁止该主题更新。 4、日志选项。...这里可以清楚看到具体是从什么版本升级到什么版本,升级日期是哪天,如果发现因为某个插件或主题更新有问题,及时回滚到上一个版本就行。...WordPress 大版本更新,如 5.1 升级到 5.2 的时候也是有更新提示,不会自动更新。不过小版本更新如 5.2.1 到 5.2.2 正常情况下都会自动更新,这些更新一般都是修复安全性的问题。

    2K40
    领券