#import <Foundation/Foundation.h>
@interface LoadingContactData : NSObject
// 读取通讯录
+ (LoadingContactData *)shareIntance;
- (void)getContactData;
@end
#import "LoadingContactData.h"
static LoadingContactData *_contactData;
@implementation LoadingContactData
+ (LoadingContactData *)shareIntance
{
if (_contactData == nil) {
_contactData = [[LoadingContactData alloc]init];
}
return _contactData;
}
- (void)getContactData
{
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
if (addressBook) {
NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *contactsArray = [NSMutableArray new];
for (NSUInteger i = ; i<[allContacts count]; i++)
{
ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];
// Get mobile number
ABMultiValueRef phonesRef = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);
NSMutableArray *telephoneArray = [self getMobilePhoneProperty:phonesRef];
[telephoneArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
THContact *contact = [[THContact alloc] init];
// Get first and last names and fullName
NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);
NSString *lastName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);
NSString *fullName = (__bridge_transfer NSString *)ABRecordCopyCompositeName(contactPerson);
// Set Contact properties
contact.firstName = firstName;
contact.lastName = lastName;
if (fullName != nil){
contact.fullName = fullName;
}
else if(firstName != nil && lastName != nil) {
contact.fullName = [NSString stringWithFormat:@"%@%@",lastName,firstName];
} else if (firstName != nil) {
contact.fullName = firstName;
} else if (lastName != nil) {
contact.fullName = lastName;
} else {
contact.fullName = @"";
}
// Get image if it exists
NSData * imgData = (__bridge_transfer NSData *)ABPersonCopyImageDataWithFormat(contactPerson,kABPersonImageFormatThumbnail); // 联系人头像(裁剪后的)
//NSData *imgData = (__bridge_transfer NSData *)ABPersonCopyImageData(contactPerson); // 联系人头像原图
UIImage *userImg = [UIImage imageWithData:imgData];
contact.image = userImg;
if (!contact.image) {
contact.image = MF_PngWithSkin(DEFAULTS_SKIN, @"icon-avatar.png");
}
contact.phone = [obj telephoneWithReformat];
if ([Unity validateMobile:contact.phone]) {
contact.recordId = ABRecordGetRecordID(contactPerson)+ [[contact.phone substringWithRange:NSMakeRange(, )] integerValue]+idx;
[contactsArray addObject:contact];
}
}];
if(phonesRef) {
CFRelease(phonesRef);
}
}
[[ContactDataArray shareContactData] setContactDataArray:contactsArray];
if(addressBook) {
CFRelease(addressBook);
}
}
else
{
NSLog(@"Error");
}
}
- (NSMutableArray *)getMobilePhoneProperty:(ABMultiValueRef)phonesRef
{
NSMutableArray *dataArray = [[NSMutableArray alloc]init];
for (int i=; i < ABMultiValueGetCount(phonesRef); i++) {
CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(phonesRef, i);
NSString *phone = (__bridge NSString *)currentPhoneValue;
[dataArray addObject:phone];
}
return dataArray;
}
@end