解决IOS7中读取不到通讯录的问题
来源:互联网 发布:js两个数组比较去重 编辑:程序博客网 时间:2024/05/16 11:53
IOS7中读取不到通讯录的问题 大部分原因是没有判断系统版本来构造ABAddressBookRef
下面是两个本人程序中的两个方法,请参考。所有版本中已测试没有问题。
//获取通讯录-(void)GetUserAddressBook{ //获取通讯录权限 ABAddressBookRef ab = NULL; // ABAddressBookCreateWithOptions is iOS 6 and up. if (&ABAddressBookCreateWithOptions) { CFErrorRef error = nil; ab = ABAddressBookCreateWithOptions(NULL, &error); if (error) { NSLog(@"%@", error); } } if (ab == NULL) { ab = ABAddressBookCreate(); } if (ab) { // ABAddressBookRequestAccessWithCompletion is iOS 6 and up. 适配IOS6以上版本 if (&ABAddressBookRequestAccessWithCompletion) { ABAddressBookRequestAccessWithCompletion(ab, ^(bool granted, CFErrorRef error) { if (granted) { // constructInThread: will CFRelease ab. [NSThread detachNewThreadSelector:@selector(constructInThread:) toTarget:self withObject:CFBridgingRelease(ab)]; } else { // CFRelease(ab); // Ignore the error } }); } else { // constructInThread: will CFRelease ab. [NSThread detachNewThreadSelector:@selector(constructInThread:) toTarget:self withObject:CFBridgingRelease(ab)]; } }}//获取到addressbook的权限-(void)constructInThread:(ABAddressBookRef) ab{ NSLog(@"we got the access right"); CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(ab); NSMutableArray* contactArray = [[NSMutableArray alloc]init]; for(int i = 0; i < CFArrayGetCount(results); i++) { ABRecordRef person = CFArrayGetValueAtIndex(results, i); //姓 NSString *firstName = (NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty)); //姓音标// NSString *firstNamePhonetic = (NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNamePhoneticProperty)); //名 NSString *lastname = (NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNameProperty)); //名音标// NSString *lastnamePhonetic = (NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNamePhoneticProperty)); //公司 NSString *Organization = (NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonOrganizationProperty)); //读取jobtitle工作// NSString *jobtitle = (NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonJobTitleProperty)); //读取department部门 NSString *department = (NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonDepartmentProperty)); //读取birthday生日 NSDate *birthday = (NSDate*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonBirthdayProperty)); //读取nickname呢称 double birthdayString = [birthday timeIntervalSince1970]; NSString *nickname = (NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonNicknameProperty)); //读取电话多值 NSString* phoneString = @""; ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty); for (int k = 0; k<ABMultiValueGetCount(phone); k++) { //获取电话Label// NSString * personPhoneLabel = (NSString*)CFBridgingRelease(ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phone, k))); //获取該Label下的电话值 NSString * personPhone = (NSString*)CFBridgingRelease(ABMultiValueCopyValueAtIndex(phone, k)); phoneString = [phoneString stringByAppendingFormat:@",%@",personPhone]; personPhone = nil; } CFRelease(phone); //获取email多值 NSString* emailString = @""; ABMultiValueRef email = ABRecordCopyValue(person, kABPersonEmailProperty); int emailcount = ABMultiValueGetCount(email); for (int x = 0; x < emailcount; x++) { //获取email Label// NSString* emailLabel = (NSString*)CFBridgingRelease(ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(email, x))); //获取email值 NSString* emailContent = (NSString*)CFBridgingRelease(ABMultiValueCopyValueAtIndex(email, x)); emailString = [emailString stringByAppendingFormat:@",%@",emailContent]; emailContent = nil; } CFRelease(email); //获取URL多值 NSString* urlString = @""; ABMultiValueRef url = ABRecordCopyValue(person, kABPersonURLProperty); for (int m = 0; m < ABMultiValueGetCount(url); m++) { //获取电话Label// NSString * urlLabel = (NSString*)CFBridgingRelease(ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(url, m))); //获取該Label下url值 NSString * urlContent = (NSString*)CFBridgingRelease(ABMultiValueCopyValueAtIndex(url,m)); urlString = [urlString stringByAppendingFormat:@",%@",urlContent]; urlContent = nil; } CFRelease(url); //构造字典 NSDictionary* dic = @{@"first_name": firstName?firstName:[NSNull null], @"last_name": lastname?lastname:[NSNull null], @"home_phone": phoneString?phoneString:[NSNull null], @"email": emailString?emailString:[NSNull null], @"company": Organization?Organization:[NSNull null], @"nick_name": nickname?nickname:[NSNull null], @"department": department?department:[NSNull null], @"birthday": [NSNumber numberWithDouble:birthdayString], @"blog_index": urlString?urlString:[NSNull null] }; [contactArray addObject:dic]; emailString = nil; urlString = nil; phoneString = nil; } CFRelease(results); contactArray = nil; }
1 0
- 解决IOS7中读取不到通讯录的问题
- iOS7中读取通讯录信息授权问题
- 解决IDEA 中src下读取不到xml问题
- 解决WebService中调用dll读取不到ini文件的问题
- Lync通讯录重新同步解决搜不到人问题
- 关于iOS7中UIView效果失效问题的解决
- 解决IOS7中LayoutConstraint动画无效果的问题
- 解决ios7中navigationbar位置显示不固定的问题
- 解决windows2003, xp中搜索不到文件的问题
- 解决火火狐中ifram获取不到的问题
- 解决myeclipse中项目重命名后访问不到的问题
- (ios7) 解决代码布局View, ios7 中 subView 高度增加StatusBar20dp的问题,保证Ios6,ios7代码一致
- (ios7) 解决代码布局View, ios7 中 subView 高度增加StatusBar20dp的问题,保证Ios6,ios7代码一致
- (ios7) 解决代码布局View, ios7 中 subView 高度增加StatusBar20dp的问题,保证Ios6,ios7代码一致
- (ios7) 解决代码布局View, ios7 中 subView 高度增加StatusBar20dp的问题,保证Ios6,ios7代码一致
- (ios7) 解决代码布局View, ios7 中 subView 高度增加StatusBar20dp的问题,保证Ios6,ios7代码一致
- (ios7) 解决代码布局View, ios7 中 subView 高度增加StatusBar20dp的问题,保证Ios6,ios7代码一致
- Setting.bundle读取不到的问题
- Data center
- mkfs.jffs2制作jffs2镜像(image)文件
- Robotramework使用总结(二)
- 前台JS(Jquery)调用后台方法 无刷新级联菜单示例
- 编译器与字节对齐
- 解决IOS7中读取不到通讯录的问题
- mysql时间
- C++虚基类的作用及使用1
- iPhone丢了怎么办-iPhone防盗及找回攻略大全
- 女人的美
- wp7 webbrowser 添加依赖属性content
- 设计模式之命令模式
- android 控件常用属性
- Android 02 Started Service--之被启动的服务