Добавить контакт в группу с помощью фреймворка Contacts

Я создал группу с помощью группы контактов, а затем хочу добавить контакт в группу.

        NSPredicate *predicate = [CNGroup predicateForGroupsWithIdentifiers:@[[[NSUserDefaults standardUserDefaults]objectForKey:@"groupIDentifier"]]];
        NSArray *groups = [store groupsMatchingPredicate:predicate error:&saveError];

        CNMutableContact *contact = [[CNMutableContact alloc] init];
        contact.familyName = @"Doe";
        contact.givenName = @"John";

        CNLabeledValue *homePhone = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:[CNPhoneNumber phoneNumberWithStringValue:@"312-555-1212"]];
        contact.phoneNumbers = @[homePhone];

        CNSaveRequest *request = [CNSaveRequest new];
        CNGroup *group = [groups firstObject];
        [request addContact:contact toContainerWithIdentifier:group.identifier];

        if (![store executeSaveRequest:request error:&saveError]) {
            NSLog(@"error = %@", saveError);
        }

Ошибка:

error = Error Domain = CNErrorDomain Code = 200 "Обновленная запись не существует" UserInfo={CNInvalidRecordIdentifiers=( "45FFBB0D-C74B-4A14-8293-9099EA7DEF81:ABGroup"), NSLocalizedDescription= Обновленная запись не существует, запрос NSLocalizedFailure не удалось, потому что он обновляет запись, которая не существует или уже была удалена.}

Я также пытался использовать:

[request addMember:contact toGroup:[groups firstObject]];

и в этом случае ошибка:

error = Error Domain=CNErrorDomain Code=200 "Updated Record Does Not Exist" UserInfo={CNInvalidRecords=(
    "<CNContact: 0x7f8ce97aa640: identifier=7CC6BC1D-1B23-48DA-8282-06115F542A97:ABPerson, givenName=John, familyName=Doe, organizationName=, phoneNumbers=(\n    \"<CNLabeledValue: 0x600001873cc0: identifier=68277209-3AE4-40AF-9EEA-DF0E1D01883C, label=_$!<Home>!$_, value=<CNPhoneNumber: 0x600000433300: stringValue=312-555-1212, initialCountryCode=(null)>>\"\n), emailAddresses=(\n), postalAddresses=(\n)>" ), NSLocalizedFailureReason=The save request failed because it updates a record that does not exist or has already been deleted., NSLocalizedDescription=Updated Record Does Not Exist}

1 ответ

Решение

Сумасшедшая вещь, которую я нашел: мне нужно позвонить обоим addMember а также addContact, чтобы на самом деле сделать контакт добавить в группу.

    CNGroup *group = [groups firstObject];
    [request addMember:contact toGroup:group];
    [request addContact:contact toContainerWithIdentifier:nil];

if (![store executeSaveRequest:request error:&saveError]) {
        NSLog(@"error = %@", saveError);
    }

Ответ службы поддержки Apple:

Вы должны сохранить контакт и группу отдельно. Затем проверьте, существуют ли они, прежде чем контакт может быть добавлен в эту группу. В противном случае вы получите ту же ошибку, которую видите в выводе.

  1. Создать группу
  2. Выполнить сохранение контакта
  3. Проверьте, существуют ли контакт и группа
  4. Добавить контакт в группу, используя addMember

Это на самом деле служит цели, но я понятия не имею, почему я должен сделать два типа запросов.

Другие вопросы по тегам