使用“联系人”框架向组添加联系人

时间:2017-10-08 03:24:06

标签: ios cncontactstore

我使用联系人组创建了一个组,然后我想向该组添加联系人。

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

错误是:

  

错误=错误域= CNErrorDomain代码= 200“更新的记录没有   存在“UserInfo = {CNInvalidRecordIdentifiers =(       “45FFBB0D-C74B-4A14-8293-9099EA7DEF81:ABGroup”),NSLocalizedDescription =更新的记录不存在,   NSLocalizedFailureReason =保存请求因为更新a而失败   记录不存在或已被删除。}

我也尝试过使用:

[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 个答案:

答案 0 :(得分:2)

我发现的疯狂事情是:我需要同时拨打addMemberaddContact,以实际将联系人添加到群组中。

    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
  5. 向群组添加联系人

    这实际上是出于此目的,但我不知道为什么我必须实际提出这两种类型的请求。

相关问题