2017-03-14 1 views
2

J'ajoute le contact en utilisant CNContactViewController natif et une fois le contact sauvegardé, il renvoie l'identifiant du contact avec le suffixe ': ABPerson' et quand je passe la liste de contact, le même contact apparaît avec un identifiant différent.Renvoie l'identificateur de contact avec le suffixe ABPerson

Est-ce que quelqu'un sait comment obtenir un identifiant de contact réel?

code pour créer:

- (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];  
} 

Délégué Callback:

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

    [viewController.navigationController popViewControllerAnimated:YES]; 
} 

Ci-dessous fonction retourne 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: Identifiant d'objet CNContact reçu de didCompleteWithContact: déléguer rappel .

+0

pourriez-vous partager le code où vous créez la 'CNContactViewController' et mettre en œuvre les méthodes de délégués. –

+0

@JonRose a mis à jour ma question. –

Répondre

0

Vous devez définir un contactStore pour le viewController.

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

Sinon cette propriété est pas définie, que d'ajouter le contact à contacts de l'utilisateur est désactivé.

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

+0

Merci @Jon, Mais cela n'a pas fonctionné aussi bien, enfin besoin d'utiliser le prédicat pour obtenir contact nouvellement ajouté du magasin avec l'identificateur de contact permanent. –

+0

@ R.S. Je suis confronté au même problème. comment pourriez-vous réussi ici quand il y avait des identifiants différents? Qu'entend-on par identifiant de contact permanent? –