Goal C Add a contact to a specific group on iPhone

I create an application that stores contacts in the address book, I use Xcode 4.2

I know how to add a contact to the address book, let's say I have a group called "A" in my contacts list and I want to add this contact to this group, how can I do this?

here is the code i use:

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

+4
source share
2 answers

First check if the group exists:

  -(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 a new group and save its identifier.

 -(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); 

}

How to establish contact with the 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.

+10
source

Try the code originally published 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 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.

0
source

Source: https://habr.com/ru/post/1382774/


All Articles