2016-08-14 2 views
0

Comment utiliser le framework de contacts ObjC bridge dans JavaScript for Automation? Je suis capable d'utiliser l'ancien framework AddressBook, mais pas celui des Contacts.Utiliser objC bridge Structure de contacts en JavaScript pour l'automatisation

Disons que j'ai un ID:

id = Application("Contacts").myCard().id() 

L'ancien cadre AddressBook fonctionne très bien:

ObjC.import("AddressBook"); 

book = $.ABAddressBook.addressBook 
person = book.recordForUniqueId(id) 
console.log(person.valueForProperty($.kABFirstNameProperty).js) 

Mais comment utiliser le cadre des contacts? J'ai essayé (basé sur la documentation unifiedContactWithIdentifier):

ObjC.import('Contacts') 

keysToFetch = [ $.CNContactGivenNameKey, $.CNContactFamilyNameKey ] 

store = $.CNContactStore 
store.unifiedContactWithIdentifierKeysToFetchError(id, keysToFetch, null) 
... 

Cela échoue avec l'erreur -2700: Erreur de script. Le popup dit TypeError: store.unifiedContactWithIdentifierKeysToFetchError is not a function

Modifier: un exemple encore plus basique, la méthode defaultContainerIdentifier donne une sortie undefined:

ObjC.import('Contacts') 
store = $.CNContactStore 
console.log(store) 
/* [Class CNContactStore] */ 
console.log(store.defaultContainerIdentifier) 
/* undefined */ 

Répondre

2

Dans le premier cas, vous obtenez une instance de la classe en utilisant une méthode de classe +addressBook. Dans le second cas, vous n'avez aucune instance et vous essayez d'appeler une méthode d'instance. Vous ne pouvez pas appeler des méthodes d'instance sur une classe.

Je suppose que vous devez créer une instance à l'aide:

store = $.CNContactStore.alloc.init 
+0

Bien sûr! Merci. – wivku