解决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
原创粉丝点击