Для поддержки обмена двоичными данными в моем приложении Mac с поддержкой сценариев я хотел бы сделать возможным получение и доставку данных в виде NSData, используя мост AS-ObjC, если это возможно.
Например, мне нравится делать этот код возможным в 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
}
Описание описания:
<NSAppleEventDescriptor: 'obj '{
'form':'ID ',
'want':'ocid',
'seld':'optr'($E0A8430080600000$),
'from':null()
}>
Аналогично, вызов [NSScriptObjectSpecifier _scriptingSpecifierWithDescriptor:descriptor]
также возвращает NULL.
Итак, как мне добраться до фактического объекта NSData внутри кода моего приложения?
А как мне вернуть объект NSData в AppleScript?