通訊錄

【鏈接】CNContact對通訊錄的基本使用(第二篇)
http://www.cnblogs.com/lantu1989/p/5469346.html

**
 *  注意:iOS9才有能使用
 *  首先在工程里導入ContactsUI.framework和Contacts.framework兩個框架
 *
 *
 *   源代碼的鏈接地址
 *   鏈接: http://pan.baidu.com/s/1jHDsvGU 密碼: 7tfj
 */
#import "RootViewController.h"
#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>
@interface RootViewController ()<CNContactPickerDelegate>
{
    UITableView *_contactTableView;
    NSMutableArray *data;
}
@end
@implementation RootViewController
- (void)loadView{
    [super loadView];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(100, 100, 120, 60);
    [button setTitle:@"顯示聯系人" forState:0];
    [button setTitleColor:[UIColor cyanColor] forState:0];
    [button addTarget:self action:@selector(showContact:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    
}
- (void)viewDidLoad {
    [super viewDidLoad];
//    CNMutableContact *contact = [self initializeContact];
    
    //添加聯系人
//    [self addContact:contact];
    // 查詢
//    NSArray *arr = [self queryContactWithName:@"雨路"];
    //將不可變的CNContact轉成CNMutableContact,便可執行以下操作
//    CNMutableContact *contact = [arr[1] mutableCopy];
    // 更新
//    contact.givenName = @"LF";
//    [self updateContact:contact];
    // 刪除
//    [self deleteContact:contact];
    //添加群組
//    [self addGroupWithName:@"friend"];
    
//    NSArray *array = [self queryGroup];
//    NSLog(@"==%@",array);
    // 刪除group操作
//    CNMutableGroup *group = [array[3] mutableCopy];
//    [self deleteWithGroup:group];
    
    // 更新group
//    CNMutableGroup *group = [array[3] mutableCopy];
//    group.name = @"i need you";
//    [self updateGroup:group];
    
    // 向group添加成員
//    NSArray *results = [self queryContactWithName:@"甘"];
//    CNGroup *group = array[3];
//    [self addMemberWithContact:results[0] toGroup:group];
    
    
    // 在group里刪除成員
//    NSArray *results = [self queryContactWithName:@"甘"];
//    CNGroup *group = array[3];
//    [self deleteMemberWithContact:results[0] toGroup:group];
}
/**
 *  在group里刪除成員
 *
 *  @param contact 被刪除的聯系人
 *  @param group   在該group里刪除聯系人
 */
- (void)deleteMemberWithContact:(CNContact *)contact toGroup:(CNGroup *)group{
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest removeMember:contact fromGroup:group];
    // 寫入
    CNContactStore *store = [[CNContactStore alloc] init];
    [store executeSaveRequest:saveRequest error:nil];
    
}
/**
 *  向group添加成員
 *
 *  @param contact 被添加的聯系人
 *  @param group   添加到該group
 */
- (void)addMemberWithContact:(CNContact *)contact toGroup:(CNGroup *)group{
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest addMember:contact toGroup:group];
    // 寫入
    CNContactStore *store = [[CNContactStore alloc] init];
    [store executeSaveRequest:saveRequest error:nil];
}
/**
 *  更新group
 *
 *  @param group 被更新的group
 */
- (void)updateGroup:(CNMutableGroup *)group{
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest updateGroup:group];
    // 寫入
    CNContactStore *store = [[CNContactStore alloc] init];
    [store executeSaveRequest:saveRequest error:nil];
}
/**
 *  刪除group操作
 *
 *  @param group 被刪除的group
 */
- (void)deleteWithGroup:(CNMutableGroup *)group{
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest deleteGroup:group];
    // 寫入
    CNContactStore *store = [[CNContactStore alloc] init];
    [store executeSaveRequest:saveRequest error:nil];
}
/**
 *  查詢
 *
 *  @return 返回數組
 */
- (NSArray *)queryGroup{
    CNContactStore *store = [[CNContactStore alloc] init];
    // 查詢所有的group(predicate參數為空時會查詢所有的group)
    NSArray *arr = [store groupsMatchingPredicate:nil error:nil];
    return arr;
}
/**
 *  添加群組
 *
 *  @param name 群組的名稱
 */
- (void)addGroupWithName:(NSString *)name{
    CNMutableGroup *group = [[CNMutableGroup alloc] init];
    group.name = name;
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest addGroup:group toContainerWithIdentifier:nil];
    // 寫入
    CNContactStore *store = [[CNContactStore alloc] init];
    [store executeSaveRequest:saveRequest error:nil];
}
/**
 *  查詢操作
 *
 *  @return 返回數組
 */
- (NSArray *)queryContactWithName:(NSString *)name{
    CNContactStore *store = [[CNContactStore alloc] init];
    // 檢索條件
    NSPredicate *predicate = [CNContact predicateForContactsMatchingName:name];
    // 提取數據 (keysToFetch:@[CNContactGivenNameKey]是設置提取聯系人的哪些數據)
    NSArray *contact = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];
    return contact;
}
/**
 *  更新聯系人
 *
 *  @param contact 被更新的聯系人
 */
- (void)updateContact:(CNMutableContact *)contact{
    // 創建聯系人請求
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest updateContact:contact];
    // 重新寫入
    CNContactStore *store = [[CNContactStore alloc] init];
    [store executeSaveRequest:saveRequest error:nil];
}
/**
 *  刪除聯系人
 *
 *  @param contact 被刪除的聯系人
 */
- (void)deleteContact:(CNMutableContact *)contact{
    // 創建聯系人請求
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest deleteContact:contact];
    // 寫入操作
    CNContactStore *store = [[CNContactStore alloc] init];
    [store executeSaveRequest:saveRequest error:nil];
}
/**
 *  添加聯系人
 *
 *  @param contact 聯系人
 */
- (void)addContact:(CNMutableContact *)contact{
    // 創建聯系人請求
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest addContact:contact toContainerWithIdentifier:nil];
    // 寫入聯系人
    CNContactStore *store = [[CNContactStore alloc] init];
    [store executeSaveRequest:saveRequest error:nil];
}
/**
 *  設置聯系人的基本屬性
 *
 *  @return 返回聯系人的對象
 */
- (CNMutableContact *)initializeContact{
    // 創建聯系人對象
    CNMutableContact *contact = [[CNMutableContact alloc] init];
    // 設置聯系人的頭像
    contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"animal"]);
    // 設置聯系人姓名
    contact.givenName = @"雨路";
    // 設置姓氏
    contact.familyName = @"甘";
    // 設置聯系人郵箱
    CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"12345qq.com"];
    CNLabeledValue *workEmail = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"32467@sina.cn"];
    CNLabeledValue *otherEmail = [CNLabeledValue labeledValueWithLabel:CNLabelOther value:@"lanaj.com"];
    contact.emailAddresses = @[homeEmail,workEmail,otherEmail];
    // 設置機構名
    contact.organizationName = @"互聯網";
    // 設置部門
    contact.departmentName = @"物流";
    // 設置工作的名稱
    contact.jobTitle = @"ios";
    // 設置社會的簡述
    CNSocialProfile *profile = [[CNSocialProfile alloc] initWithUrlString:@"12306.cn" username:@"lily" userIdentifier:nil service:@"IT行業"];
    CNLabeledValue *socialProfile = [CNLabeledValue labeledValueWithLabel:CNSocialProfileServiceGameCenter value:profile];
    contact.socialProfiles = @[socialProfile];
    // 設置電話號碼
    CNPhoneNumber *mobileNumber = [[CNPhoneNumber alloc] initWithStringValue:@"15201596724"];
    CNLabeledValue *mobilePhone = [[CNLabeledValue alloc] initWithLabel:CNLabelPhoneNumberMobile value:mobileNumber];
    contact.phoneNumbers = @[mobilePhone];
    // 設置與聯系人的關系
    CNContactRelation *friend = [[CNContactRelation alloc] initWithName:@"好朋友"];
    CNLabeledValue *relation = [CNLabeledValue labeledValueWithLabel:CNLabelContactRelationFriend value:friend];
    contact.contactRelations = @[relation];
    // 設置生日
    NSDateComponents *birthday = [[NSDateComponents alloc] init];
    birthday.day = 6;
    birthday.month = 5;
    birthday.year = 2000;
    contact.birthday = birthday;
    
    return contact;
}
/**
 *  顯示聯系人
 */
- (void)showContact:(UIButton *)sender{
    // 初始化CNContactPickerViewController
    CNContactPickerViewController *contactPickerViewController = [[CNContactPickerViewController alloc] init];
    // 設置代理
    contactPickerViewController.delegate = self;
    // 顯示聯系人窗口視圖
    [self presentViewController:contactPickerViewController animated:YES completion:nil];
}
#pragma mark -- CNContactPickerDelegate 代理 --
/**
 *  點擊聯系人控制器的Cancel按鈕執行該方法
 *
 *  @param picker 聯系人控制器
 */
- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker{
    NSLog(@"取消");
}
/**
 *  選中聯系人時執行該方法
 *
 *  @param picker  聯系人控制器
 *  @param contact 聯系人
 */
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{
    NSLog(@"聯系人的資料:%@",contact);
    [self dismissViewControllerAnimated:YES completion:nil];
    //顯示聯系人詳細頁面
    CNContactViewController *contactVC = [CNContactViewController viewControllerForContact:contact];
    [self presentViewController:contactVC animated:YES completion:nil];
}
@end
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,681評論 25 708
  • 在此特此聲明:一下所有鏈接均來自互聯網,在此記錄下我的查閱學習歷程,感謝各位原創作者的無私奉獻 ! 技術一點一點積...
    遠航的移動開發歷程閱讀 11,172評論 12 197
  • 晚自習下后,我獨自走在小路上,夜深人靜,如水的月光靜靜地灑在地上,樹上,然后又悄悄的漫進屋里,使這個寂寞的秋夜,變...
    李科杰閱讀 122評論 0 1
  • #事情太多了,精力體力還有腦子完全都跟不上,怎么破? #作為春節假期作息紊亂癥的輕度患者,我昨天睡得很晚,今天早晨...
    無限爸爸閱讀 310評論 3 1
  • 陰云密布有幾日 始終未見滴雨下 昨夜雷公終夢醒 一夜狂飆未見停 不愿雷大雨點小 故憋三日下場大 為人成長也如是 厚...
    一往直前閱讀 166評論 0 1