如何在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 */
答案 0 :(得分:2)
在第一种情况下,您使用类方法+addressBook
获取该类的实例。在第二种情况下,您没有实例,并且您正在尝试调用实例方法。您无法在类上调用实例方法。
我想你必须使用:
创建一个新实例store = $.CNContactStore.alloc.init