【发布时间】:2016-04-03 13:25:17
【问题描述】:
我的应用程序有一些我希望能够提供给 AppleScript 的原始数据内容,以便至少可以查看它,甚至可以通过将其保存到文件或将其设置为支持它的其他对象来处理它。
现在,我不明白使用哪种数据类型来实现这一点。
查看脚本编辑器的输出,例如:
tell application "Script Editor"
the clipboard as record
--> {Unicode text:"text",
«class BBLM»:«data BBLM6C6C756E»,
string:"text"}
end tell
我如何返回这些 «data ...»,它们显然是实际数据的 4 字符代码和十六进制字符串编码字节的组合。
我尝试从我的脚本属性返回一个包含原始字节数据的 NSData 对象,但这不起作用。
更新
看来这与实现scripting<type>Descriptor 和scripting<type>WithDescriptor 有关。除了在 Sketch 示例代码中使用之外,我找不到任何关于此的文档。我假设如果我碰巧在我的 Sdef 中定义了这样的自定义类型,则会为该类型调用这些。
但是:我不会提前知道我要发送的类型,所以我无法在 Sdef 中预先定义它们。我的情况更像the clipboard:我有我想返回的类似剪贴板的数据,所以我只知道它们在运行时的 4 字符类型。这意味着我不会被这些处理程序询问。必须有其他方法可以通用地创建和接收这些类型,就像剪贴板实现一样。
【问题讨论】:
-
NSData对象用于自定义value-types符合NSCoding不能由 AppleScript 支持的基本类表示。例如,基本的 AppleScript 类型point和rectangle是包装在NSData中的 C 类型。要定义自定义value-type,您必须在 sdef 文件中提供目标类,并在目标类的类别中实现scripting<type>...方法。 -
在我的另一个问题 (stackoverflow.com/questions/36363705) 中根据您的 cmets 进行了更多挖掘之后,我终于弄清楚了您的意思,而我还没有理解,即一切都来了使用 NSAppleEventDescriptor,这是每个 Cocoa 类型最终在将值返回给正在运行的 Applescript 之前分配给的类型。
-
确实,Cocoa 脚本可能是一件很棒的事情,但文档记录很差,而且很容易出错。在瑞士,我们会说“s'isch en saich”(类似于“pain in the ass”)
-
所以,感谢您的帮助,没有您的指点,我还没有弄清楚这一点,尽管现在一切都是如此“当然,这完全有道理!” :) 我希望这在将来也能帮助其他人。对于那些在 Cocoa 层之前使用过 AS 的人来说,这可能都是显而易见的东西,但我完全被难住了。
标签: macos cocoa applescript cocoa-scripting