Objective C Adding a Contact to a specific Group in the iPhone

六月ゝ 毕业季﹏ 提交于 2019-12-30 03:31:07

问题


I am making an App that stores contacts in the address book , I am using Xcode 4.2

I know how to add a contact in the address book , let s say I have a group called "A" in the Contact list and I want to Add this contact to this group , how to do that ?

here is the Code I am using :

ABAddressBookRef *iPhoneAddressBook = ABAddressBookCreate();
    ABRecordRef contact = ABPersonCreate();

    //add infos
    ABRecordSetValue(contact, kABPersonFirstNameProperty,(__bridge_retained CFStringRef)firstName, nil);
    ABRecordSetValue(contact, kABPersonLastNameProperty,(__bridge_retained CFStringRef)lastName, nil);
    ABRecordSetValue(contact, kABPersonOrganizationProperty, (__bridge_retained CFStringRef)organization, nil);
    ABRecordSetValue(contact, kABPersonJobTitleProperty, (__bridge_retained CFStringRef)title, nil);


    ABMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiRealPropertyType);


    ABMultiValueAddValueAndLabel(multiPhone, (__bridge_retained CFStringRef)workTel, kABWorkLabel, NULL);
    ABMultiValueAddValueAndLabel(multiPhone, (__bridge_retained CFStringRef)workFax, kABPersonPhoneWorkFAXLabel, NULL);

    ABRecordSetValue(contact, kABPersonPhoneProperty, multiPhone, nil);
    CFRelease(multiPhone);
    ABAddressBookAddRecord(iPhoneAddressBook, contact, nil);

Thanks


回答1:


First Check if the group exist:

    -(void) CheckIfGroupExistWithName:(NSString*)groupName {


BOOL hasGroup = NO;
//checks to see if the group is created ad creats group for HiBye contacts
ABAddressBookRef addressBook = ABAddressBookCreate();
CFIndex groupCount = ABAddressBookGetGroupCount(addressBook);
CFArrayRef groupLists= ABAddressBookCopyArrayOfAllGroups(addressBook);

    for (int i=0; i<groupCount; i++) {
        ABRecordRef currentCheckedGroup = CFArrayGetValueAtIndex(groupLists, i);
        NSString *currentGroupName = (NSString *)ABRecordCopyCompositeName(currentCheckedGroup);

        if ([currentGroupName isEqualToString:groupName]){
                      //!!! important - save groupID for later use
            self.groupId = ABRecordGetRecordID(currentCheckedGroup);
            hasGroup=YES;
        }
        [groupName release];
    }

    if (hasGroup==NO){
                    //id the group does not exist you can create one
        [self createNewGroup:groupName];
    }

//CFRelease(currentCheckedGroup);
    CFRelease(groupLists);
CFRelease(addressBook); 

}

Use this to create new group, and store its ID

-(void) createNewGroup:(NSString*)groupName {

ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef newGroup = ABGroupCreate();
ABRecordSetValue(HiByeGroup, kABGroupNameProperty,groupName, nil);
ABAddressBookAddRecord(addressBook, newGroup, nil);
ABAddressBookSave(addressBook, nil);
CFRelease(addressBook);

//!!! important - save groupID for later use
self.groupId = ABRecordGetRecordID(newGroup);
CFRelease(newGroup);

}

The is how to set a contact to a group

            //Use the Group ID you stored.
            ABRecordRef HiByeGroup = ABAddressBookGetGroupWithRecordID(addressbook, self.groupId);
    BOOL didAdd = ABGroupAddMember(HiByeGroup,ref,&error);

    if (!didAdd) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error while adding person to HiBye group %@", &error);
        exit(-1);  // Fail
    }

    BOOL didSave = ABAddressBookSave(addressbook, &error);

    if (!didSave) {
    // Update to handle the error appropriately.
        NSLog(@"Unresolved error while saving address book%@", &error);
        exit(-1);  // Fail
    }

Good luck




回答2:


Try out the code originally posted by malinois:

ABAddressBookRef addressBook = ABAddressBookCreate(); // create address book record 
ABRecordRef person = ABPersonCreate(); // create a person  

NSString *phone = @"0123456789"; // the phone number to add  

//Phone number is a list of phone number, so create a multivalue  
ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABPersonPhoneProperty); 
ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,phone,kABPersonPhoneMobileLabel, NULL);

ABRecordSetValue(person, kABPersonFirstNameProperty, @"FirstName" , nil); // first name of the new person 
ABRecordSetValue(person, kABPersonLastNameProperty, @"LastName", nil); // his last name 
ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue, &anError); // set the phone number property 
ABAddressBookAddRecord(addressBook, person, nil); //add the new person to the record

ABRecordRef group = ABGroupCreate(); //create a group 
ABRecordSetValue(group, kABGroupNameProperty,@"My Group", &error); // set group's name 
ABGroupAddMember(group, person, &error); // add the person to the group         
ABAddressBookAddRecord(addressBook, group, &error); // add the group   

ABAddressBookSave(addressBook, nil); //save the record  

CFRelease(person); // relase the ABRecordRef  variable

Hope this helps.



来源:https://stackoverflow.com/questions/8249010/objective-c-adding-a-contact-to-a-specific-group-in-the-iphone

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!