iOS本地通讯录获取

简单的对于通讯录获得的总结,不成敬意!
1.用的类库,导入的头文件

iOS9之前

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
遵循 
ABPeoplePickerNavigationControllerDelegate

iOS9之后

#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>
遵循 
CNContactPickerDelegate

2.仅仅读取(相当于调用系统的类和界面(类似获取照片的功能))

(1)是否授权方面:(示例代码)

iOS9之前

if (IOS_BEFORE(9.0)) {
        WS(ws);
        ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
        if (status ==kABAuthorizationStatusAuthorized) {// 授权成功
            ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
            peoplePicker.peoplePickerDelegate = self;
            // iOS8之后要加入这个属性
            if (IOS_LATER(8.0)) {
                peoplePicker.predicateForSelectionOfPerson = [NSPredicate predicateWithValue:false];
            }
            [self presentViewController:peoplePicker animated:YES completion:nil];
        }else {// 授权失败
            // 获取通讯录不是在主线程中获得,所以切换主线程,展示错误
            dispatch_async(dispatch_get_main_queue(), ^{
                [ws antuorFaildToShowView];
            });
            NSLog(@"授权失败");
        }
       
    }

iOS9之后

 else {
        
        CNContactStore *contactStore = [[CNContactStore alloc] init];
        WS(ws);
        [contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
            
            if (granted) {
                CNContactPickerViewController *picker = [[CNContactPickerViewController alloc] init];
                picker.delegate = self;
                [self presentViewController:picker animated:YES completion:^{}];
            }else {
                
                NSLog(@"授权失败");
               NSLog(@"[NSThread currentThread] = %@",[NSThread currentThread]) ;
                // 获取通讯录不是在主线程中获得,所以切换主线程,展示错误
                dispatch_async(dispatch_get_main_queue(), ^{
                    [ws antuorFaildToShowView];
                });
            }
            
        }];
    }

(2)代理方法示例:(示例代码)

iOS9之前

#pragma mark - ABPeoplePickerNavigationControllerDelegate
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{
    
    ABMultiValueRef valuesRef = ABRecordCopyValue(person, kABPersonPhoneProperty);
    CFIndex index = ABMultiValueGetIndexForIdentifier(valuesRef,identifier);
    CFStringRef value = ABMultiValueCopyValueAtIndex(valuesRef,index);
    
    NSString *phoneNumber = (__bridge NSString*)value;
   NSString  *newPhone =[self trimSting:phoneNumber];
    //赋值给我TextFeild
    [self saveTeleToLoca:newPhone];
    
    [self dismissViewControllerAnimated:YES completion:^{}];
}
-(void)saveTeleToLoca:(NSString *)phone {
    _phoneTF.text =phone;
    [CMUserDefaults saveLocalString:phone andKey:kPhoneRechargeTelePhone];
    
}
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
    [self dismissViewControllerAnimated:YES completion:nil];
}

iOS9之后

#pragma mark - CNContactPickerDelegate
#ifdef __IPHONE_9_0

// 通讯录列表 - 点击某个联系人 - 详情页 - 点击一个号码, 返回
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty {
    
    // 获得到用户的手机号码
    NSString *phoneNumber = [contactProperty.value stringValue];
    // 去掉手机号码的“-”
    NSString  *newPhone =[self trimSting:phoneNumber];
    
    //赋值给我TextFeild
    [self saveTeleToLoca:newPhone];
    
}
- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker {
    [self dismissViewControllerAnimated:YES completion:nil];
}
#endif

注意:
1.iOS10之后要在info.plist 中加入以下的属性(来询问获得用户的权限)

    <key>NSContactsUsageDescription</key>    
    <string>contactsDesciption</string>

具体iOS10之后相册和麦克风都要征得用户权限的key详见:http://www.jianshu.com/p/c212cde86877

2.对于为了防止iOS9的系统运行出现iOS10的程序防止编译错误,无法通过,应该用条件编译如下:

#if __IPHONE_9_0
// 9.0之后的用,防止9.0之前的编译失败
#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>
@interface PhoneRechargeViewController ()<UITextFieldDelegate,CNContactPickerDelegate,NHThirdPayViewDelegate,ABPeoplePickerNavigationControllerDelegate>
#else

@interface PhoneRechargeViewController ()<UITextFieldDelegate,ABPeoplePickerNavigationControllerDelegate,NHThirdPayViewDelegate>
#endif

3.需要获得通讯录具体数据用:(相当于获得通讯录数据,自己展示)
后续总结:

参考网址:
http://www.jianshu.com/p/6acad14cf3c9
http://blog.csdn.net/kenrry1992/article/details/51252274
http://www.jianshu.com/p/df0ea100c3da

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容