IOS9中联系人对象的使用及增删改查操作的函数封装

之前克服重重困难把IOS9中新的类联系人搞明白了,现在把增删改查封装成了函数,如下:

  1 //
  2 //  ViewController.m
  3 //  IOS9中联系人CNContact的使用
  4 //
  5 //  Created by mac on 16/5/6.
  6 //  Copyright © 2016年 mzw. All rights reserved.
  7 //
  8
  9 #import "ViewController.h"
 10
 11 //导入IOS9联系人模型
 12 @import Contacts;
 13
 14 @interface ViewController ()
 15
 16 @end
 17
 18 @implementation ViewController
 19
 20 - (void)viewDidLoad {
 21     [super viewDidLoad];
 22
 23     [self getContactList];
 24     [self addOneContactToContactList];
 25     [self deleteOneContactFromContactList];
 26     [self updateOneContectToContactList];
 27
 28 }
 29 /**
 30  *  读取联系人通讯录
 31  */
 32 -(NSMutableArray*)getContactList{
 33     NSMutableArray *array = [NSMutableArray array];
 34     //     1.获取授权状态
 35     CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
 36     //      2.判断授权状态,如果不是已经授权,则直接返回
 37     if (status != CNAuthorizationStatusAuthorized) {
 38         return nil;
 39     }
 40
 41     // 3.创建通信录对象
 42     CNContactStore *contactStore = [[CNContactStore alloc] init];
 43
 44     // 4.创建获取通信录的请求对象
 45     // 4.1.拿到所有打算获取的属性对应的key
 46     NSArray *keys = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey,CNContactImageDataKey];
 47
 48     // 4.2.创建CNContactFetchRequest对象
 49     CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys];
 50
 51     // 5.遍历所有的联系人
 52     [contactStore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
 53         [array addObject:contact];
 54         }
 55     ];
 56
 57     return array;
 58
 59 }
 60
 61
 62
 63 /**
 64  *  删除通讯录中的一位联系人
 65  */
 66 -(void)deleteOneContactFromContactList{
 67
 68         CNContactStore * store = [[CNContactStore alloc]init];
 69         //检索条件,检索所有名字中有zhang的联系人
 70         NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"W"];
 71         //提取数据
 72         NSArray * contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];
 73         CNMutableContact *contact1 = [contacts objectAtIndex:0];
 74
 75
 76        //初始化方法
 77         CNSaveRequest * saveRequest = [[CNSaveRequest alloc]init];
 78
 79         //删除联系人(不行)
 80         [saveRequest deleteContact:contact1];
 81
 82 }
 83
 84
 85
 86 /**
 87  *  修改通讯录中的一位联系人
 88  *  先根据条件生成一个谓词,根据谓词读到联系人,并对联系人进行update
 89  */
 90 -(void)updateOneContectToContactList{
 91
 92         CNContactStore * store = [[CNContactStore alloc]init];
 93         //检索条件,检索所有名字中有zhang的联系人
 94         NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"张"];
 95         //提取数据
 96         NSArray * contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];
 97
 98         CNMutableContact * contact1 = [[contacts objectAtIndex:0] mutableCopy];
 99         contact1.givenName = @"heh";
100
101         CNSaveRequest * saveRequest = [[CNSaveRequest alloc]init];
102
103         [saveRequest updateContact:contact1];
104         [store executeSaveRequest:saveRequest error:nil];
105 }
106
107
108 /**
109  *  添加一位联系人到通讯录
110  */
111 //
112 -(void)addOneContactToContactList{
113
114         CNMutableContact * contact = [[CNMutableContact alloc]init];
115         contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"22"]);
116         //设置名字
117         contact.givenName = @"三强";
118         //设置姓氏
119         contact.familyName = @"王";
120         CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"[email protected]"];
121         CNLabeledValue *workEmail =[CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"[email protected]"];
122         contact.emailAddresses = @[homeEmail,workEmail];
123         //家庭
124         CONTACTS_EXTERN NSString * const CNLabelHome                             NS_AVAILABLE(10_11, 9_0);
125         //工作
126         CONTACTS_EXTERN NSString * const CNLabelWork                             NS_AVAILABLE(10_11, 9_0);
127         //其他
128         CONTACTS_EXTERN NSString * const CNLabelOther                            NS_AVAILABLE(10_11, 9_0);
129
130         // 邮箱地址
131         CONTACTS_EXTERN NSString * const CNLabelEmailiCloud                      NS_AVAILABLE(10_11, 9_0);
132
133         // url地址
134         CONTACTS_EXTERN NSString * const CNLabelURLAddressHomePage               NS_AVAILABLE(10_11, 9_0);
135
136         // 日期
137         CONTACTS_EXTERN NSString * const CNLabelDateAnniversary                  NS_AVAILABLE(10_11, 9_0);
138         contact.phoneNumbers = @[[CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberiPhone value:[CNPhoneNumber phoneNumberWithStringValue:@"12344312321"]]];
139         CNMutablePostalAddress * homeAdress = [[CNMutablePostalAddress alloc]init];
140         homeAdress.street = @"贝克街";
141         homeAdress.city = @"伦敦";
142         homeAdress.state = @"英国";
143         homeAdress.postalCode = @"221B";
144         contact.postalAddresses = @[[CNLabeledValue labeledValueWithLabel:CNLabelHome value:homeAdress]];
145         NSDateComponents * birthday = [[NSDateComponents  alloc]init];
146         birthday.day=7;
147         birthday.month=5;
148         birthday.year=1992;
149         contact.birthday=birthday;
150
151         //    //初始化方法
152         CNSaveRequest * saveRequest = [[CNSaveRequest alloc]init];
153         //    添加联系人(可以)
154         [saveRequest addContact:contact toContainerWithIdentifier:nil];
155         //    写入
156         CNContactStore * store = [[CNContactStore alloc]init];
157         [store executeSaveRequest:saveRequest error:nil];
158
159 }
160
161
162 @end
时间: 2024-10-13 11:37:48

IOS9中联系人对象的使用及增删改查操作的函数封装的相关文章

(转)SQLite数据库增删改查操作

原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n).char(n).d

MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

一.用到的实体类如下: Student.java [html] view plaincopy package com.company.entity; import java.io.Serializable; import java.util.Date; public class Student implements Serializable{ private static final long serialVersionUID = 1L; private int id; private Stri

Android中内容提供者ContentProvider实现数据库增删改查

1.我们首先new一个我们自己的类集成ContentProvider,并实现方法如下 package com.wzw.sqllitedemo.providers; import com.wzw.sqllitedemo.db.PersonSQLiteOpenHelper; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues;

[实例]php中PDO方式实现数据库的增删改查

整理的比较容易理解的PDO操作实例,注意,需要开启php的pdo支持,php5.1以上版本支持实现数据库连接单例化,有三要素 静态变量.静态实例化方法.私有构造函数 DPDO.php //PDO操作类 //author http://www.lai18.com class DPDO{ private $DSN; private $DBUser; private $DBPwd; private $longLink; private $pdo; //私有构造函数 防止被直接实例化 private f

48.Python中ORM模型实现mysql数据库基本的增删改查操作

首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'orm_intro_dem', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306', } } 之后将创建的app添加到settings.py文件中的INSTALLED_APPS中

Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作

此篇文章主要讲述DAO.Java Bean和Servlet实现操作数据库,把链接数据库.数据库操作.前端界面显示分模块化实现.其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面进行描述.参考前文: Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交 Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中 Java+MyE

【greenDAO3】 项目搭建与增删改查操作

最近需要开始一个新的项目了,考虑到既然是新项目了,那么一些常用的框架肯定也要用当下最火的!这次的新项目中涉及到了本地数据存储,很早前有个项目的本地数据库框架用的是ActiveAndroid,github找了下这个框架,发现已经两年多已经没有更新了.然后就想到了一直没有时间去涉及到的greenDAO,github一搜索,哦呦?star有5000+,并且依然保持着很高的更新频率,并且性能远远的高于activeAndroid(见下图),果断选用. 刚开始想偷偷懒,大致浏览了下greenDAO官网后就开

基于Java的XML文件模拟数据库进行增删改查操作

我们知道XML文件既可以用来进行数据的传输,也可以配合DTD约束文件用来作为配置文件,当然其本质就是一个加了标签以及众多空格保持格式的字符串,那么就可以用Java进行操作. 本例是使用MyEclipse带入DOM4j解析时要用的jar包的基础上做的:当然DOM4j相对于DOM SAX 等解析方式的方便程度是不言而喻的. 下面是本次用例XML文件 <?xml version="1.0" encoding="UTF-8"?> <persons> 

MyBatis基本增删改查操作

本文内容主要介绍单条记录的增删改查操作,MyBatis提供了很多完成单条记录的增删改查操作的API.本例主要讲述<UserMapper> UserMapper org.apache.ibatis.session.SqlSession.getMapper(Class<UserMapper> clazz)的使用.使用此API,我们需要创建UserMapper操作接口,函数名和MyBatis的User.xml配置文件中的操作id名对应. [转载使用,请注明出处:http://blog.c