J'ai une application iOS qui a besoin d'accéder au contrôleur de sélection de sélecteur de contacts afin de permettre à l'utilisateur de sélectionner une propriété de contact telle que l'adresse e-mail / numéros de téléphone des adresses e-mail d'imessage.
Le problème que j'ai en ce moment , est que je ne peux pas comprendre comment analyser les données retournées. J'ai utilisé le Si vous exécutez le code ci-dessus. Obtenez la réponse suivante: P> ContactPickerCickerContactProperty code>, mais je ne suis pas en mesure d'analyser les données dont j'ai besoin. P>
2015-10-11 13:30:07.059 Actions[516:212765] <CNLabeledValue: 0x13656d090: identifier=21F2B1B2-8158-466B-9224-E2036CA07D28, label=_$!<Other>!$_, value=News_Europe@iEUNS.com> 2015-10-11 13:30:07.061 App_Name[516:212765] (
"<CNLabeledValue: 0x13672a500: identifier=6697A0E9-3B91-4566-B26E-83B87979F816, label=_$!<Main>!$_, value=<CNPhoneNumber: 0x13672a660: countryCode=gb, digits=08000391010>>" )
4 Réponses :
Les valeurs retournées sont du CNLABeledValue classe. Afin d'obtenir la valeur d'eux, pour, par exemple, les courriels, faites ce si la valeur que vous vouliez un numéro de téléphone, c'est ainsi que vous récupéreriez que P> < Pré> xxx pré> car la valeur renvoyée est un cnlabeledvalue code>, vous pouvez également récupérer le numéro de téléphone ou l'étiquette de la messagerie p>
Ah juste je vois. Merci beaucoup. Je viens de passer à partir de l'utilisation de l'ancien cadre d'adresse, alors je me suis battu avec cela. Merci encore :)
Une seule question, j'attends que l'utilisateur sélectionne soit une adresse électronique d'un numéro de téléphone. Comment puis-je vérifier ce qu'ils ont sélectionné?
Je pense que ces informations seraient stockées dans ContactProperty.value code>,
ContactProperty.label code>,
ContactProperty.key code>, etc. Je vais tester chacun de ces Et voyez ce qu'il génère, comme je l'ai jamais utilisé cela avant personnellement.
Génial, contactProperty.key code> fonctionne parfaitement. Merci chris :)
Je promets que ce sera ma dernière question, mais savez-vous s'il y a une sorte de indexpath.row code> numéroté que je peux utiliser? (Au lieu de
emailaddresses.firstObject code>). Donc, je pouvais faire
e-mailaddresses [indénitation.row] code>.
Si vous voulez dire que vous avez besoin de l'index de l'adresse e-mail sélectionnée, je pense que ContactProperty.value Code> pointe vers l'email et que, par conséquent, vous n'avez pas besoin d'utiliser le courrier électronique
code> tableau.
Ah juste je vois. Brillant, je promets que je ne voudrais plus vous gêner. Merci :)
Hey @chrisloonam, quand j'essaie d'obtenir l'étiquette de cnlabeledvalue code> Je reçois un texte comme celui-ci: " $!
Oui, j'ai obtenu ce résultat, mais je veux obtenir uniquement des courriels de travail, pas d'autres courriels comme à la maison et etc.
Pour obtenir des étiquettes correctement localisées au lieu de cordes comme "$!
Cela fonctionnerait-il toujours si vous avez plusieurs adresses et que l'utilisateur a sélectionné autre chose que la première adresse?
Here is swift version of Chris answer : func fatchContacts(store : CNContactStore) { do { let groups = try store.groups(matching: nil) let predicate = CNContact.predicateForContactsInGroup(withIdentifier: groups[0].identifier) //let predicate = CNContact.predicateForContactsMatchingName("John") let keyToFatch = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName ) ,CNContactEmailAddressesKey] as [Any] let contacts = try store.unifiedContacts(matching: predicate, keysToFetch: keyToFatch as! [CNKeyDescriptor]) //------------------------------------------------------ //-------------Get Here----------------------------------------- print(contacts) print(contacts[0]) let formatter = CNContactFormatter () print(formatter.string(from: contacts[0])) print(contacts[0].givenName) print(contacts[0].emailAddresses) let emailValue : CNLabeledValue = contacts[0].emailAddresses.first!; let email = emailValue.value print(email) } catch{ } } Just pass the CNContactStore object
pour SWIFT 3.0:
public func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) { if let emailValue : CNLabeledValue = contact.emailAddresses.first { txtEmail.text = emailValue.value as String } if let phoneNumber : CNLabeledValue = contact.phoneNumbers.first { txtMobno.text = phoneNumber.value.stringValue } txtFname.text = contact.givenName + " " + contact.familyName }
Malheureusement, la réponse de Chris vous indique comment obtenir la valeur de l'objet CnLabeledValue renvoyé, mais cela ne vous indique pas comment identifier ce que CnlabeledValue a été sélectionné en fonction du paramètre ContactProperty les fonctionnalités de fonction.
Ce que vous devez faire est de faire du vélo à travers chacune des adresses électroniques du contact et de vérifier si l'identifiant correspond à l'identifiant de contact sélectionné. Utilisez le code suivant à l'intérieur de la fonction DidSelectContactProperty: p> Remarque Je n'ai testé que ce code avec des adresses postales, il peut donc nécessiter une modification supplémentaire de fonctionner avec des adresses électroniques. p> p>