iOS8通訊錄之聯系人增刪查,多號碼增刪操作


#import <AddressBook/AddressBook.h>

#pragma mark 刪除一個號碼
- (void)deleteLocalMarkSuccess:(void(^)(BOOL success))successBlock{

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        ABAddressBookRef addressBook = ABAddressBookCreate();
        CFArrayRef records;
        // 獲取通訊錄中全部聯系人
        records = ABAddressBookCopyArrayOfAllPeople(addressBook);
        
        // 遍歷全部聯系人,檢查已存號碼庫信息數量
        for (int i=0; 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,0)));
            NSString *firstLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phones,0));
            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(0, 0), ^{
            ABAddressBookRef addressBook = ABAddressBookCreate();
            CFArrayRef records;
            // 獲取通訊錄中全部聯系人
            records = ABAddressBookCopyArrayOfAllPeople(addressBook);
            __block bool done = NO;
            // 遍歷全部聯系人,檢查是否存在指定號碼再進行刪除
            for (int i=0; i<CFArrayGetCount(records); i++)
            {
                ABRecordRef record = CFArrayGetValueAtIndex(records, i);
                CFTypeRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
                NSString *firstLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phones,0));
                CFArrayRef phoneNums = ABMultiValueCopyArrayOfAllValues(phones);
                
                if ([firstLabel isEqualToString:@"#0雲助手號碼庫yunzhushou"])
                {
                    for (int j=0; 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(0, 0), ^{
        __block bool done = NO;
        ABAddressBookRef addressBook = ABAddressBookCreate();
        CFArrayRef records;
        // 獲取通訊錄中全部聯系人
        records = ABAddressBookCopyArrayOfAllPeople(addressBook);
        
        // 遍歷全部聯系人,檢查是否存在指定號碼再進行add
        bool have = NO;
        for (int i=0; i<CFArrayGetCount(records); i++)
        {
            ABRecordRef record = CFArrayGetValueAtIndex(records, i);
            CFTypeRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
            NSString *firstLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phones,0));
            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 = 0755-83212344;
    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>0) {
        CNLabeledValue *firstLabelValue = contact.phoneNumbers[0];
        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>1) { NSString *firstPhoneNumber = phonesList[1][@"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 = 0; 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=0; i<CFArrayGetCount(records); i++) { ABRecordRef record = CFArrayGetValueAtIndex(records, i); CFTypeRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty); CFArrayRef phoneNums = ABMultiValueCopyArrayOfAllValues(phones); if (phoneNums) { for (int j=0; j<CFArrayGetCount(phoneNums); j++) { NSString *phone = (NSString*)CFArrayGetValueAtIndex(phoneNums, j); if ([phone isEqualToString:phoneNum]) { return YES; } } } } CFRelease(addressBook); return NO; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM