iOS8通讯录之联系人增删查,多号码增删操作
2024-08-28 17:33:48
#import <AddressBook/AddressBook.h>
#pragma mark 删除一个号码
- (void)deleteLocalMarkSuccess:(void(^)(BOOL success))successBlock{ dispatch_async(dispatch_get_global_queue(, ), ^{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef records;
// 获取通讯录中全部联系人
records = ABAddressBookCopyArrayOfAllPeople(addressBook); // 遍历全部联系人,检查已存号码库信息数量
for (int i=; i<CFArrayGetCount(records); i++)
{
ABRecordRef record = CFArrayGetValueAtIndex(records, i); CFTypeRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
// CFArrayRef values = ABMultiValueCopyArrayOfAllValues(phones);
// NSArray *arr =(__bridge NSArray *)(values);
// if (!arr.count) {
// continue;
// }
NSString *firstphoneNumber = (CFBridgingRelease(ABMultiValueCopyValueAtIndex(phones,)));
NSString *firstLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phones,));
NSLog(@"firstPhone = %@ firstLabel = %@",firstphoneNumber,firstLabel);
CFStringRef firstNameRef = ABRecordCopyValue(record, kABPersonFirstNameProperty);
//这里是特殊情况的比较号码并删除,正常是比较姓名即可
if ([firstLabel isEqualToString:@"#0云助手号码库yunzhushou"])
{
bool done = ABAddressBookRemoveRecord(addressBook, record, nil);
successBlock(done);
break;
}
} ABAddressBookSave(addressBook, nil);
CFRelease(addressBook);
}); }
#pragma mark 删除一个号码属性 - (void)deletePersonPropertyWithNumber:(NSString *)phoneNumber withBlock:(void(^)(BOOL success))successBlock{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_async(dispatch_get_global_queue(, ), ^{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef records;
// 获取通讯录中全部联系人
records = ABAddressBookCopyArrayOfAllPeople(addressBook);
__block bool done = NO;
// 遍历全部联系人,检查是否存在指定号码再进行删除
for (int i=; i<CFArrayGetCount(records); i++)
{
ABRecordRef record = CFArrayGetValueAtIndex(records, i);
CFTypeRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
NSString *firstLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phones,));
CFArrayRef phoneNums = ABMultiValueCopyArrayOfAllValues(phones); if ([firstLabel isEqualToString:@"#0云助手号码库yunzhushou"])
{
for (int j=; j<CFArrayGetCount(phoneNums); j++)
{
NSString *phone = (NSString*)CFArrayGetValueAtIndex(phoneNums, j);
if ([phone isEqualToString:phoneNumber])
{
ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutableCopy(phones);
done = ABMultiValueRemoveValueAndLabelAtIndex(multiPhone,j);
ABRecordSetValue(record, kABPersonPhoneProperty, multiPhone, nil);
CFRelease(multiPhone); break;
}else{
NSLog(@"没有找到要删除的号码:%@",phoneNumber);
}
}
}else
{
NSLog(@"没有找到要删除的联系人:%@",phoneNumber); }
} successBlock(done);
ABAddressBookSave(addressBook, nil);
CFRelease(addressBook); }); }); }
#pragma mark 增加一个号码属性
- (void)addPersonPropertyWithNumberModel:(NumberModel *)numberModel withBlock:(void(^)(BOOL success))successBlock{ dispatch_async(dispatch_get_global_queue(, ), ^{
__block bool done = NO;
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef records;
// 获取通讯录中全部联系人
records = ABAddressBookCopyArrayOfAllPeople(addressBook); // 遍历全部联系人,检查是否存在指定号码再进行add
bool have = NO;
for (int i=; i<CFArrayGetCount(records); i++)
{
ABRecordRef record = CFArrayGetValueAtIndex(records, i);
CFTypeRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
NSString *firstLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phones,));
NSLog(@"firstLabel = %@",firstLabel);
CFStringRef firstNameRef = ABRecordCopyValue(record, kABPersonFirstNameProperty);
CFStringRef lastName = ABRecordCopyValue(record, kABPersonLastNameProperty);
//此处正常应该根据名字判断 下面是特殊情况根据首个号码标签属性来判断
if ([firstLabel isEqualToString:@"#0云助手号码库yunzhushou"])
{
have = YES;
BOOL containNumber = NO;
//存在 本地联系人只要添加一对标签号码属性
//已存在则不添加
CFArrayRef phoneNumbers = ABMultiValueCopyArrayOfAllValues(phones);
for (int j ; j < CFArrayGetCount(phoneNumbers); j++) {
NSString *number = (__bridge NSString *)CFArrayGetValueAtIndex(phoneNumbers, j);
if ([number isEqualToString:numberModel.phone]) {
containNumber = YES;
break;
}
}
if (!containNumber) {
ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutableCopy(phones); ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)(numberModel.phone), (__bridge CFStringRef)(numberModel.rpt_type), NULL);
ABRecordSetValue(record, kABPersonPhoneProperty, multiPhone, nil);
CFRelease(multiPhone);
done = ABAddressBookSave(addressBook, nil); NSLog(@"本地标记联系人存在 只是添加属性");
break ; } } } if (!have) {
//不存在 首次添加
NSLog(@"本地标记联系人不存在 首次添加");
// [self wirteLocalPhoneNumbersToContactFromDB];
done = YES;
} ABAddressBookSave(addressBook, nil);
CFRelease(addressBook);
successBlock(done);
}); }
//iOS9 组织多号码以备写入新的联系人
- (void)numbersReadyWriteToContact{ CNMutableContact *mContact = [[CNMutableContact alloc]init];
mContact.imageData = UIImagePNGRepresentation([UIImage
imageNamed:@""]);
mContact.givenName = @"";
mContact.familyName = @"";
NSString *label = @"住宅";
NSString *number = -;
NSMutableArray *arrPhones =[NSMutableArray array];
CNLabeledValue *phone = [CNLabeledValue labeledValueWithLabel:label value:[CNPhoneNumber phoneNumberWithStringValue:number]];
[arrPhones addObject:phone];
mContact.phoneNumbers = arrPhones;
[self stroreContact: contact];
}
//iOS9 存入新联系人 -多值
- (void)stroreContact:(CNMutableContact *)contact
{
BOOL existPhone = NO;
if (contact.phoneNumbers.count>) {
CNLabeledValue *firstLabelValue = contact.phoneNumbers[];
CNPhoneNumber *firstPhoneNumber = firstLabelValue.value;
existPhone = [self existPhone:firstPhoneNumber.stringValue];
} if (existPhone) {
NSLog(@"号码已存在");
return;
}
NSLog(@"号码不存在,存储新的联系人"); //创建添加请求
CNSaveRequest *saveRequest = [[CNSaveRequest alloc]init];
[saveRequest addContact:contact toContainerWithIdentifier:nil];
//写入
CNContactStore *store = [[CNContactStore alloc]init];
[store executeSaveRequest:saveRequest error:nil];
}
//phoneList 为包含多对号码属性字典的数组,用于一个为一个联系人添加多个号码
- (void)addNewContact:(NSArray *)phonesList
{
BOOL existPhone = NO;
if (phonesList.count>) {
NSString *firstPhoneNumber = phonesList[][@"value"];
existPhone = [self existPhone:firstPhoneNumber];
} if (existPhone) {
NSLog(@"号码已存在");
return;
}
NSLog(@"号码不存在,存储新的联系人"); //name
ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate();
CFErrorRef error = NULL;
ABRecordRef newPerson = ABPersonCreate();
ABRecordSetValue(newPerson, kABPersonFirstNameProperty, @"", &error);
ABRecordSetValue(newPerson, kABPersonLastNameProperty, @"", &error); ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType); for (NSInteger i = ; i < phonesList.count; i++) {
ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)(phonesList[i][@"value"]), (__bridge CFStringRef)(phonesList[i][@"label"]), NULL);
ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone, nil);
NSLog(@"%ld",i);
} ABAddressBookAddRecord(iPhoneAddressBook, newPerson, &error);
ABAddressBookSave(iPhoneAddressBook, &error); CFRelease(multiPhone);
CFRelease(newPerson);
CFRelease(iPhoneAddressBook); }
// 指定号码是否已经存在
- (BOOL)existPhone:(NSString*)phoneNum{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef records;
// 获取通讯录中全部联系人
records = ABAddressBookCopyArrayOfAllPeople(addressBook); // 遍历全部联系人,检查是否存在指定号码
for (int i=; i<CFArrayGetCount(records); i++)
{
ABRecordRef record = CFArrayGetValueAtIndex(records, i);
CFTypeRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
CFArrayRef phoneNums = ABMultiValueCopyArrayOfAllValues(phones);
if (phoneNums)
{
for (int j=; j<CFArrayGetCount(phoneNums); j++)
{
NSString *phone = (NSString*)CFArrayGetValueAtIndex(phoneNums, j);
if ([phone isEqualToString:phoneNum])
{
return YES;
}
}
}
}
CFRelease(addressBook);
return NO;
}
最新文章
- WebDriver多线程并发
- jquery 中的事件冒泡
- 11-JS基础
- 解决蛋疼的阿里云单CPU使用率的问题。
- 【转载】CocoaPods安装和使用教程
- jquery实现导航栏头部点击变换颜色
- 新浪SAE搭建项目
- box-shadow阴影详解
- 微信开发中遇到的问题,关于cdnmidimgurl 图片获取
- Excel更改单元格格式后无效
- [JSOI2007]文本生成器
- API测试:Chai &; Mocha
- for 循环 以及基本的数据类型
- scrapy之Crawspider 腾讯招聘实战案例
- windows系统-phpstudy升级mysql8.0.12安装教程及修改密码和安装注意事项
- .mht文件转换为html
- Java 设计模式笔记
- (转)CentOS 7 单用户模式+救援模式
- golang cgo 使用总结
- eclipse启动一闪而退