Я прочитал ответы, в которых нужно сначала сохранить человека в адресную книгу, затем создать группу, затем добавить человека в группу, а затем снова сохранить.
Это не сработало для меня.
В конечном итоге у меня сработало следующее:
Сохраните контакт в адресной книге, сохраните группу в адресной книге, добавьте контакт в группу, а затем сохраните.Очень раздражает, но рад, что это работает, и надеюсь, что это работает для вас.
ABAddressBookRef addressBook;
bool wantToSaveChanges = YES;
bool didSave;
CFErrorRef error = NULL;
addressBook = ABAddressBookCreateWithOptions(NULL, &error);
// If you get some error when trying to add a contact, make sure it's not a permission issue
// ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
//
// });
// create person
ABRecordRef aRecord = ABPersonCreate();
CFErrorRef anError = NULL;
bool didSet;
didSet = ABRecordSetValue(aRecord, kABPersonFirstNameProperty, CFSTR("Lily"), &anError);
if (!didSet) { NSLog(@"Error: %@", anError); }
didSet = ABRecordSetValue(aRecord, kABPersonLastNameProperty, CFSTR("Bell"), &anError);
if (!didSet) { NSLog(@"Error: %@", anError); }
bool didAdd;
didAdd = ABAddressBookAddRecord(addressBook, aRecord, &anError);
if (!didAdd) { NSLog(@"Error: Couldn't add record, %@", anError); };
// we've added the person to the address book at this point
// now try creating a group, and adding that person to the group (failed to add, error is NULL, for whatever reason)
// if that fails, we might need to save the added contact, then add them to the group, then save (FAILED)
// if the above fails, save the added contact, save the group, add the contact to group, then save (PASSED)
// if the above fails, god help us
// saving the added person first before adding them to the group
didSave = ABAddressBookSave(addressBook, &error);
if (!didSave) { NSLog(@"Error: %@", error); }
ABRecordRef group = ABGroupCreate(); // create the group
didSet = ABRecordSetValue(group, kABGroupNameProperty, @"NYC", &anError);
if (!didSet) { NSLog(@"Error: Couldn't set group, %@", anError); }
didAdd = ABAddressBookAddRecord(addressBook, group, &anError);
if (!didAdd) { NSLog(@"Error: Couldn't add group, %@", anError); }
// save the group now
didSave = ABAddressBookSave(addressBook, &error);
if (!didSave) { NSLog(@"Error: %@", error); }
// adding person to group
didAdd = ABGroupAddMember(group, aRecord, &anError);
if (!didAdd) { NSLog(@"Error: Couldn't add contact to group, %@", anError); }
// final save
didSave = ABAddressBookSave(addressBook, &error);
if (!didSave) { NSLog(@"Error: %@", error); }
CFRelease(addressBook);
CFRelease(aRecord);
CFRelease(firstName);
CFRelease(lastName);