Adressbuch auslesen z.B. mit CNContactPickerMBS

Hi,
ich würde gerne mit dem MBS Plugin z.B. CNContactPickerMBS macOS Kontakte auslesen.
Ich habe mir dazu das Beispiel “CNContactPicker Test” angeschaut und denke, dass das genau
meine Anforderung erfüllt, nur leider weiß ich nicht, wie ich die kompletten Adressdaten inkl.
Ort, Plz Telefonummer etc. auslesen kann. Habt ihr damit schon Erfahrung gemacht?
Leider wird ab XOJO 2019r2 die Addressbook Funktion nicht mehr supportet.

Klemens

Du bekommst ein CNContactMBS Objekt.
Und da kann man Sachen abfragen mit CNLabeledValueMBS und CNPostalAddressMBS. So ungefhr:

[code]Dim c As CNContactMBS // dein Kontakt

Dim postalAddresses() As CNLabeledValueMBS = c.postalAddresses
For Each postalAddresse As CNLabeledValueMBS In postalAddresses

Dim p As CNPostalAddressMBS = postalAddresse.Value

MsgBox p.Street + EndOfLine + p.PostalCode + " " + p.City
Next[/code]

Und die E-Mail Adresse(n) bekommt man so:

Dim p As variant
Dim emailAddresses() As CNLabeledValueMBS = contact.emailAddresses
For Each emailAddresse As CNLabeledValueMBS In emailAddresses
p = emailAddresse.Value
MsgBox p
Next

Hallo Christian,

so einfach scheint das nicht zu gehen, beide Beispiele (oben) bekomme ich nicht zum Laufen.

Könntest du mir in deinem Programm-Beispiel “ContactPicker Test” darstellen, wie ich neben dem Namen die Plz, Ort, Strasse, Telefonnummer, Email übernehmen kann? Danke.

Klemens

Danke erstmal, nach viel nachlesen und probieren bekommen ich nun die relevanten Daten ausgelesen. Aber irgendwie finde ich es schon merkwürdig, wie das Adressbuch von Apple aufgebaut ist bzw. auszulesen ist.

Hi Christian,

ich bin leider noch auf ein Problem gestossen.
Wie kann ich das Feld Firmenname aus dem Apple Adressbuch auslesen?
Unter CNLabeledValueMBS ist es ja ein String (organizationName), aber wenn ich diesen abfrage, erhalte ich diese Fehlermeldung:
A Cocoa CNPropertyNotFetchedException was not handled: A property was not requested when contact was fetched.

Im Debugger finde ich auch nirgendwo den Firmennamen. Wo finde ich den?

Klemens

Das Feld organizationName wurde also nicht geladen!?

Gibt’s das bei dem Datensatz?
Normal versuchen wir alle Werte zu laden.

Also ist das Programm signiert, hat entitlement für Kontakte drin?

Dann im App.open:

ContactStore.requestAccessForEntityType ContactStore.CNEntityTypeContacts

um nach Erlaubnis zu fragen falls nötig.

Der Kontakt im Event kommt eventuell ohne Organisation, daher vielleicht neu holen:

[code]dim e as NSErrorMBS
Dim c As CNContactMBS = app.ContactStore.unifiedContactWithIdentifier(contact.identifier, e)

Log "Contact: "+c.givenName + c.familyName
Log "organization: "+c.organizationName[/code]