OC

来源:互联网 发布:大学生防网络诈骗 编辑:程序博客网 时间:2024/06/11 14:40

好久没写博客了,婚结完了,也该开始写一点东西了,先从OC的整理开始。

通讯录一定要记得在 info.plist 文件里写上权限请求,不然后果很严重呦。

另外请记得加入“AddressBook.framework”,并且引用 #import<AddressBook/AddressBook.h>


一、代码

#pragma mark 获取通讯录内容- (void)haveAddressBook{    // 判断是否授权    ABAuthorizationStatus authorizationStatus = ABAddressBookGetAuthorizationStatus();    if (authorizationStatus == kABAuthorizationStatusNotDetermined) {        // 请求授权        ABAddressBookRef addressBookRef =  ABAddressBookCreate();        ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {            if (granted) {  // 授权成功                            } else {        // 授权失败                NSLog(@"授权失败!");            }        });    }        // 2. 获取所有联系人    ABAddressBookRef addressBookRef = ABAddressBookCreate();    CFArrayRef arrayRef = ABAddressBookCopyArrayOfAllPeople(addressBookRef);    long count = CFArrayGetCount(arrayRef);    for (int i = 0; i < count; i++) {        NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:0];        //获取联系人对象的引用        ABRecordRef people = CFArrayGetValueAtIndex(arrayRef, i);        //获取当前联系人名字        NSString *firstName=(__bridge NSString *)(ABRecordCopyValue(people, kABPersonFirstNameProperty));     /*        如果没有获取到联系人姓名,可以试试下面的两个方法,含义见文章最后。        firstName = (__bridge NSString *)(ABRecordCopyValue(people, kABPersonLastNameProperty));        firstName = (__bridge NSString*)(ABRecordCopyValue(people, kABPersonMiddleNameProperty));     */        //获取当前联系人的电话 数组        NSMutableArray *phoneArray = [[NSMutableArray alloc]init];        ABMultiValueRef phones = ABRecordCopyValue(people, kABPersonPhoneProperty);        for (NSInteger j=0; j<ABMultiValueGetCount(phones); j++) {            NSString *phone = (__bridge NSString *)(ABMultiValueCopyValueAtIndex(phones, j));            NSLog(@"phone=%@", phone);            [phoneArray addObject:phone];        }        //上方 phoneArray 为数组,是为了单人储存多个电话的情况设计。    }}


二、info.plist文件

Privacy - Contacts Usage Description  -  是否允许使用你的通讯录?



三、效果








四、联系人相关数据

       //获取当前联系人姓氏        NSString *lastName=(__bridge NSString *)(ABRecordCopyValue(people, kABPersonLastNameProperty));        //获取当前联系人中间名        NSString *middleName=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonMiddleNameProperty));        //获取当前联系人的名字前缀        NSString *prefix=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonPrefixProperty));        //获取当前联系人的名字后缀        NSString *suffix=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonSuffixProperty));        //获取当前联系人的昵称        NSString *nickName=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonNicknameProperty));        //获取当前联系人的名字拼音        NSString *firstNamePhoneic=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonFirstNamePhoneticProperty));        //获取当前联系人的姓氏拼音        NSString *lastNamePhoneic=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonLastNamePhoneticProperty));        //获取当前联系人的中间名拼音        NSString *middleNamePhoneic=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonMiddleNamePhoneticProperty));        //获取当前联系人的公司        NSString *organization=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonOrganizationProperty));        //获取当前联系人的职位        NSString *job=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonJobTitleProperty));        //获取当前联系人的部门        NSString *department=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonDepartmentProperty));        //获取当前联系人的生日        NSString *birthday=(__bridge NSDate*)(ABRecordCopyValue(people, kABPersonBirthdayProperty));        //获取当前联系人的备注        NSString *notes=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonNoteProperty));        //获取创建当前联系人的时间 注意是NSDate        NSDate *creatTime=(__bridge NSDate*)(ABRecordCopyValue(people, kABPersonCreationDateProperty));        //获取最近修改当前联系人的时间        NSDate *alterTime=(__bridge NSDate*)(ABRecordCopyValue(people, kABPersonModificationDateProperty));        //获取地址        ABMultiValueRef address = ABRecordCopyValue(people, kABPersonAddressProperty);        for (int j=0; j<ABMultiValueGetCount(address); j++) {            //地址类型            NSString *type = (__bridge NSString *)(ABMultiValueCopyLabelAtIndex(address, j));            NSDictionary * tempDic = (__bridge NSDictionary *)(ABMultiValueCopyValueAtIndex(address, j));            //地址字符串,可以按需求格式化            NSString *adress = [NSString stringWithFormat:@"国家:%@\n省:%@\n市:%@\n街道:%@\n邮编:%@",[temDic valueForKey:(NSString*)kABPersonAddressCountryKey],[tempDic valueForKey:(NSString*)kABPersonAddressStateKey],[tempDic valueForKey:(NSString*)kABPersonAddressCityKey],[tempDic valueForKey:(NSString*)kABPersonAddressStreetKey],[tempDic valueForKey:(NSString*)kABPersonAddressZIPKey]];        }        //获取当前联系人头像图片        NSData *userImage=(__bridge NSData*)(ABPersonCopyImageData(people));        //获取当前联系人纪念日        NSMutableArray *dateArr = [[NSMutableArray alloc]init];        ABMultiValueRef dates= ABRecordCopyValue(people, kABPersonDateProperty);        for (NSInteger j=0; j<ABMultiValueGetCount(dates); j++) {            //获取纪念日日期            NSDate *data =(__bridge NSDate*)(ABMultiValueCopyValueAtIndex(dates, j));            //获取纪念日名称            NSString *str =(__bridge NSString*)(ABMultiValueCopyLabelAtIndex(dates, j));            NSDictionary *tempDic = [NSDictionary dictionaryWithObject:data forKey:str];            [dateArr addObject:tempDic];        }




感谢观看,学以致用更感谢~






原创粉丝点击