在JavaScript for Automation中使用objC bridge Contacts框架

时间:2016-08-14 00:13:22

标签: objective-c javascript-automation jxa

如何在JavaScript for Automation中使用ObjC桥接器框架?我可以使用旧的AddressBook框架,但不能使用Contacts的框架。

假设我有一个ID:

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

旧的AddressBook框架工作正常:

ObjC.import("AddressBook");

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

但是如何使用Contacts框架? 我尝试过(基于unifiedContactWithIdentifier的文档):

ObjC.import('Contacts')

keysToFetch = [ $.CNContactGivenNameKey, $.CNContactFamilyNameKey ]

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

失败,出现错误-2700:脚本错误。弹出窗口显示TypeError: store.unifiedContactWithIdentifierKeysToFetchError is not a function

修改:一个更基本的示例,defaultContainerIdentifier方法提供undefined输出:

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

1 个答案:

答案 0 :(得分:2)

在第一种情况下,您使用类方法+addressBook获取该类的实例。在第二种情况下,您没有实例,并且您正在尝试调用实例方法。您无法在类上调用实例方法。

我想你必须使用:

创建一个新实例
store = $.CNContactStore.alloc.init