为了支持我的可编写脚本的 Mac 应用程序中的二进制数据交换,我希望能够使用 AS-ObjC 桥接器以 NSData 形式接收和传递数据(如果可能的话)。
例如,我喜欢在 AppleScript 中实现以下代码:
use framework "Foundation"
set theData to current application's NSData's dataWithContentsOfFile:"/some/binary/file"
tell application "MyApp"
set raw value to theData
end tell
sdef 包含一个值类型和属性:
<suite name="My Suite" code="Demo">
<value-type name="ObjCNSData" code="NSDa">
<cocoa class="NSData"/>
</value-type>
<class name="application" code="capp">
<property name="raw data" code="rawD" type="ObjCNSData">
<cocoa key="rawData"/>
</property>
然后我将转换处理程序作为扩展来实现NSData
,类似于 Sketch 示例将 NSColor 转换为值类型“RGB Color”的方式:
@implementation NSData(DemoScripting)
+ (NSData *)scriptingObjCNSDataWithDescriptor:(NSAppleEventDescriptor *)desc {
id res = [desc coerceToDescriptorType:'NSDa'];
// -> res is NULL, which is not getting me any further
}
desc 的描述是:
<NSAppleEventDescriptor: 'obj '{
'form':'ID ',
'want':'ocid',
'seld':'optr'($E0A8430080600000$),
'from':null()
}>
同样,调用[NSScriptObjectSpecifier _scriptingSpecifierWithDescriptor:descriptor]
也返回 NULL。
那么,如何获取应用程序代码中的实际 NSData 对象?
如何将 NSData 对象返回到 AppleScript?