联系标识符返回ABPerson后缀

时间:2017-03-14 13:31:51

标签: ios cncontact cncontactstore cncontactviewcontroller

我正在使用Native CNContactViewController添加联系人,一旦联系人保存,它将返回联系人的标识符':ABPerson'后缀,当我交叉检查联系人列表时,同一联系人显示不同的标识符。

有谁知道如何获取实际的联系人标识符?

要创建的代码:

- (IBAction)didSelectedAddContact:(id)sender {
CNMutableContact *contact =  [CNMutableContact new];

CNContactViewController *contactController = [CNContactViewController viewControllerForNewContact:contact];

NSLog(@"contact id : %@", contact.identifier);

contactController.allowsEditing = true;
contactController.allowsActions = true;

contactController.delegate = self;
[self.navigationController pushViewController:contactController animated:YES];    
}

委托回电:

- (void)contactViewController:(CNContactViewController *)viewController didCompleteWithContact:(nullable CNContact *)contact{
_contact = contact;

    [viewController.navigationController popViewControllerAnimated:YES];
}

下面的函数返回nil:

- (CNContact*) getContactFromStoreForIdentifier:(NSString*) identifier
{
    CNContact *updatedContact = nil;

   id descriptor = [CNContactViewController descriptorForRequiredKeys];

CNContactStore *store = [CNContactStore new];

NSError *error;

updatedContact = [store unifiedContactWithIdentifier:identifier
                                         keysToFetch:@[descriptor]
                                               error:&error];
// Found?
if (updatedContact == nil)
{
    if (error != nil)
    {

    }
}
 return updatedContact; }

@Parameter:从didCompleteWithContact收到的CNContact对象的标识符:委托回调。

1 个答案:

答案 0 :(得分:0)

您必须为viewController设置contactStore。

CNContactStore *store = [CNContactStore new];
contactController.contactStore = store;
  

如果没有设置此属性,则将联系人添加到用户   联系人被禁用。

来源:https://developer.apple.com/reference/contactsui/cncontactviewcontroller/1616912-contactstore