标签:
AddressBook.h
// // AddressBook.h // YUAddressBook // // Created by yuzhx on 15/8/1. // Copyright (c) 2015年 BruceYu. All rights reserved. // #import <Foundation/Foundation.h> #import "AddressBookObj.h" @interface AddressBook : NSObject +(AddressBook*)sharedInstance; /** * 返回通讯录对象 * * @return (AddressBookObj) **/ +(NSMutableArray*)addressBooks; /** * 判断是否存在 phoneNum * * @param phoneNum 联系人电话 * * @return (NSMutableArray) **/ +(BOOL)containPhoneNum:(NSString*)phoneNum; @end
AddressBook.m
// // AddressBook.m // YUAddressBook // // Created by yuzhx on 15/8/1. // Copyright (c) 2015年 BruceYu. All rights reserved. // #import <AddressBook/AddressBook.h> #import <UIKit/UIKit.h> #import "AddressBook.h" #define IsSafeString(a) ((a)&& (![(a) isEqual:[NSNull null]]) &&((a).length>0)) #define SafeString(a) ((((a)==nil)||([(a) isEqual:[NSNull null]])||((a).length==0))?@"":(a)) static AddressBook *sharedAddressBook; static dispatch_once_t onceToken; @interface AddressBook() @property (assign,nonatomic)ABAddressBookRef addressBooksRef; @property (strong,nonatomic)NSMutableArray *addressBooksArr; @end @implementation AddressBook +(AddressBook*)sharedInstance{ dispatch_once(&onceToken, ^{ sharedAddressBook = [[AddressBook alloc]init]; }); return sharedAddressBook; } - (instancetype)init { self = [super init]; if (self) { } return self; } #pragma mark - -(ABAddressBookRef)addressBooksRef{ if (!_addressBooksRef) { if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0) { _addressBooksRef = ABAddressBookCreateWithOptions(NULL, NULL); dispatch_semaphore_t sema = dispatch_semaphore_create(0); ABAddressBookRequestAccessWithCompletion(_addressBooksRef, ^(bool granted, CFErrorRef error){dispatch_semaphore_signal(sema);}); dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); }else{ _addressBooksRef = ABAddressBookCreateWithOptions(_addressBooksRef, nil); } } return _addressBooksRef; } -(NSMutableArray *)addressBooksArr{ if (!_addressBooksArr) { _addressBooksArr = [NSMutableArray array]; NSArray *contacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople([AddressBook sharedInstance].addressBooksRef); NSInteger contactsCount = [contacts count]; for(int i = 0; i < contactsCount; i++) { ABRecordRef record = (__bridge ABRecordRef)[contacts objectAtIndex:i]; AddressBookObj * addressBookObj = [[AddressBookObj alloc] init]; //取得联系人的ID addressBookObj.recordID = (int)ABRecordGetRecordID(record); //完整姓名 CFStringRef compositeNameRef = ABRecordCopyCompositeName(record); addressBookObj.compositeName = SafeString((__bridge NSString *)compositeNameRef); compositeNameRef != NULL ? CFRelease(compositeNameRef) : NULL; //处理联系人电话号码 ABMultiValueRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty); for(int i = 0; i < ABMultiValueGetCount(phones); i++) { CFStringRef phoneLabelRef = ABMultiValueCopyLabelAtIndex(phones, i); CFStringRef localizedPhoneLabelRef = ABAddressBookCopyLocalizedLabel(phoneLabelRef); CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, i); NSString * localizedPhoneLabel = (__bridge NSString *) localizedPhoneLabelRef; NSString * phoneNumber = (__bridge NSString *)phoneNumberRef; NSString *phone = [phoneNumber stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [phoneNumber length])]; if (i == 0) { addressBookObj.pbone = SafeString(phone); } [addressBookObj.phoneInfo setValue:localizedPhoneLabel forKey:phone]; //Release phoneLabelRef == NULL ? : CFRelease(phoneLabelRef); localizedPhoneLabelRef == NULL ? : CFRelease(localizedPhoneLabelRef); phoneNumberRef == NULL ? : CFRelease(phoneNumberRef); } if(phones != NULL) CFRelease(phones); if (IsSafeString(addressBookObj.pbone)) { [_addressBooksArr addObject:addressBookObj]; } CFRelease(record); } } return _addressBooksArr; } +(NSMutableArray*)addressBooks{ return [AddressBook sharedInstance].addressBooksArr; } +(BOOL)containPhoneNum:(NSString*)phoneNum{ for (AddressBookObj *obj in [AddressBook sharedInstance].addressBooksArr) { if (obj.phoneInfo[phoneNum]) { return YES; } } return NO; } @end
https://github.com/6357/YUAddressBook
标签:
原文地址:http://my.oschina.net/u/868062/blog/486558