Cocoa 脚本:接受并返回 NSData

2024-01-03

为了支持我的可编写脚本的 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?


谢恩·斯坦利确实知道一种方法 https://forum.latenightsw.com/t/convert-nsdata-into-raw-string/1914/4,它甚至不需要在我的应用程序中添加额外的代码 - 相反,这一切都可以在 AppleScript 中完成,并使用这两个转换函数:

use framework "Foundation"

set nsData1 to current application's NSData's dataWithContentsOfFile:"/etc/hosts"
set asData to my ASDataFromNSData(nsData1)
set nsData2 to my NSDataFromASData(asData)

on ASDataFromNSData(theData)
    set theCode to current application's NSHFSTypeCodeFromFileType("'rdat'")
    return (current application's NSAppleEventDescriptor's descriptorWithDescriptorType:theCode |data|:theData) as data
end ASDataFromNSData

on NSDataFromASData(asData)
    return (current application's NSArray's arrayWithObject:asData)'s firstObject()'s |data|()
end NSDataFromASData

看起来rdat是用于此目的的特殊 AppleScript 类型,框架会自动处理与 NSData 的转换。不过,我找不到 AE.framework 标头中声明的类型。

那么我仍然需要处理这个问题rdat不过,请在我的应用程序代码中明确输入。但我不需要 sdef 中的值类型,并且可以将属性更改为:

<property name="raw data" code="rawD" type="any">
    <cocoa key="rawData"/>
</property>

返回数据为rdat很相似。我的-rawData method:

return [NSAppleEventDescriptor descriptorWithDescriptorType:'rdat' data:myNSData];

不过,只有当我将属性类型声明为“any”时,这才有效。如果我使用type="rdat",脚本调试器将该类型显示为专用的原始数据类型,但是当尝试在脚本中设置或获取该属性时,我收到 -10000 错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cocoa 脚本:接受并返回 NSData 的相关文章

  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • vscode通过SSH连接gitlab的问题

    我在尝试通过 SSH 连接到 GitLab 远程存储库时遇到问题 这里是迄今为止完成的步骤 成功生成 SSH 密钥 管理人员将密钥添加到存储库中 因此当我访问 GitLab 网站时 我可以提交和发布分支 我无法从 VSCODE 发布分支并收
  • SwiftUI 更新主菜单 [已解决] kludgey

    真正的问题 你如何更新mainMenu在 SwiftUI 中 它真的可以工作吗 我在 SwiftUI 中构建了一个基于 MacOS 文档的应用程序 其中包括所有内置的文件菜单命令 即关闭 保存 复制 重命名 等 在保存文档之前 我会验证结构
  • 如何在 Mac 上安装 Clang 9?

    这是我 Mac 上的内容 clang version Apple LLVM version 10 0 0 clang 1000 10 44 4 Target x86 64 apple darwin17 7 0 Thread model po
  • 从 Java 执行 .app 文件夹?

    有没有一种合理的方法可以直接从 Java 执行 app 目录 而不是深入查找二进制文件 我有一个带有一些首选项的应用程序 其中包括用于打开各种内容的外部程序 如果在 OSX 上用户可以只选择 app 文件夹 那就太好了 我可以查找 app
  • 无法使 csshX 在 Mac OS Big Sur 上运行

    csshX不适用于 Mac Big Sur 未实现 POSIX tmpnam 在 System Library Perl 5 28 darwin thread multi 2level POSIX pm 第 185 行使用 File Tem
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin
  • 如何在 swiftUI (macOS) 中检测按键按下和释放

    除了标题之外没什么可说的 我希望能够在按下按键和释放按键时 在 macOS 上 在 swiftUI 视图中执行操作 在 swiftUI 中是否有任何好的方法可以做到这一点 如果没有 有什么解决方法吗 不幸的是 键盘事件处理是其中一个令人痛苦
  • AVCaptureDevice 找不到任何设备

    这行代码是我今天遇到的问题 macOS 应用程序 NSArray devices AVCaptureDevice devicesWithMediaType AVMediaTypeVideo 我更新Xcode后 系统总是让我空着devices
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 使用 MacPorts 在 Mac OS X 10.5 上安装 PostgreSQL 时出错

    我已经使用 MacPorts 在几台不同的计算机上安装了 PostgreSQL 没有问题 但是当涉及到我自己的笔记本电脑时 我无法构建它 当我执行此命令时 sudo port install postgresql83 我收到此错误 chec
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 超类与类SpecificationPolicy不匹配

    我得到了一个superclass mismatch for class SpecificationPolicy尝试安装或升级某些brew 软件包时出错 例如 更新安装 supabase CLI 时 brew install supabase
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 使用 Cocoa 获取无法安装的驱动器列表

    我想获取在 OS X 下使用 Cocoa Objective C 无法安装 弹出的驱动器列表 我希望 NSWorkspace getFileSystemInfoForPath 能帮助我 NSArray listOfMedia NSWorks
  • Swift 中带圆角的 NSWindow

    我想要一个圆角的窗户 但我在每个角落都有一个白点 Code let effect NSVisualEffectView frame NSRect x 0 y 0 width 0 height 0 effect blendingMode be
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • Mac 上用户“postgres”的密码身份验证失败

    我在创建新的 psql 用户时遇到问题 因为我无法以 postgres 身份登录 psql 我已尝试过 1 sudo u postgres psql 2 sudo u postgres createuser img site P s e 他

随机推荐

  • 当搜索中使用多个单词时,如何在 Lucene.net 中执行 AND 搜索?

    我正在研究 Lucene net 尝试了解如何在我的应用程序中实现它 我有以下代码 Add 2 documents var doc1 new Document var doc2 new Document doc1 Add new Field
  • “LIKE”运算符适用于 MS Access,但不适用于 ADO

    我正在尝试使用带有星号的 Like 来过滤记录 它在使用 Access 2010 返回许多记录时有效 我很困惑为什么它与 ADO 一起使用时什么也不返回 该代码包含多个表和列 因此为了排除故障 我做了一个简单的查询 这是代码 strsql
  • 将 Jpeg 更改为渐进式 Jpeg 图像 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想从基线 Jpeg 图像转换为渐进式 Jpeg 图像 我的磁盘中存储了 10 000 张图像 我尝试
  • 如何混合两个图像?

    我的视图中有两个图像 我需要混合这两个图像 但问题是无法得到完美的融合 图像混合代码 CGSize newSize CGSizeMake backGroundImage frame size width backGroundImage fr
  • NHibernate Future 对象图许多查询

    给定一个使用 Future 调用的多级对象图 var Dads db Session Query
  • jQuery 验证无法正常工作

    我需要在单击 div 按钮时触发此验证 如果验证成功 我希望它提醒 很好 不幸的是 尽管会触发验证并检查所有规则 但如果必填字段为空 则不会出错 不过 任何其他检查都会出错 最后 如果我正确填写字段并单击按钮 则不会发生任何情况 JS do
  • 当 Elasticsearch 索引的运行状况为黄色时,这意味着什么?

    我正在开发一个创建 N 个索引和 N 个别名的应用程序 并且这些索引和别名之间存在一一对应的关系 但偶尔 我会得到 N 个索引和 N 1 个别名 其中一个索引的名称本应由别名使用 由于某种原因 当发生这种情况时 虚假索引 应该是别名 的状态
  • 创建新站点时,如何告诉 IIS 6 将 .NET 版本设置为 2.0(而不是 1.1)?

    我们使用 IIS 管理器在 IIS 6 Windows Server 2003 中创建新站点 当这些站点在 IIS 6 中创建时 ASP NET 版本默认为 ASP NET 1 1 我们希望它默认为 ASP NET 2 0 这对我们来说是一
  • 如何将身份验证标头传递给 OData 服务

    我正在遵循以下描述的身份验证方法http blogs msdn com b astoriateam archive 2010 07 21 odata and authentication part 6 custom basic authen
  • getClass() 在基类的构造函数中报告哪个类

    在 Java 中 可以安全地假设getClass 在用作基类的类的构造函数中调用将提供有关派生类的信息 而不是基类的类的信息 它似乎有效 但我想这并不一定意味着它是安全的 例如 如果我有以下两个类 public class Parent p
  • Autofac:使用输入和输出类型参数解析变体类型

    这个问题是我之前问题的后续 Autofac 将多个逆变实现隐藏在一个组合后面 https stackoverflow com questions 7139054 autofac hiding multiple contravariant i
  • Windows 窗体 - 以透明度为背景的 PNG

    我正在开发一个小型个人项目 我需要创建一个具有阴影的非矩形窗口 更准确地说是一个圆形 尽管这可能会改变 如果表单将 png 设置为背景 我可以通过更改 Region 属性来获得圆形窗口 问题是窗口已对齐 PNG 的透明度不起作用 所以问题是
  • Picture.writeToStream() 未写出所有位图

    我在用着webview capturePicture 创建一个包含网页所有绘图对象的 Picture 对象 我可以使用以下方法成功将此 Picture 对象渲染为位图canvas drawPicture picture dst 没有问题 但
  • 在Java中将Key和Value添加到优先级队列并按Key排序

    我正在尝试获取字符串列表并将它们添加到带有键和值的优先级队列中 键是单词 值是单词的字符串值 然后我需要首先对具有最高字符串值的队列进行排序 优先级队列不允许我添加 2 个值 public static List
  • JavaScript,声明变量时语法混乱

    我最近在一本正在研究的 JavaScript 书中发现了以下代码行 var col top bottom 这是我第一次遇到一个变量似乎被赋予了三个变量 有人可以解释一下这行代码中发生了什么吗 它只是一个较短的版本 var col var t
  • Java 的 RAM 使用情况与任务管理器显示的不符

    我一直在玩Java的JVM 制作一个1024 3 基本上 1Gb 长度字节数组 我使用任务管理器 查看进程 和这个小片段测量了数组创建之前 之后以及数组被垃圾收集器销毁之后的 RAM 使用情况 public static void show
  • 使用wkhtmltopdf时如何处理ContentNotFoundError?

    有人可以告诉我如何解决以下问题吗 与以前的版本不同 wkhtmltopdf 没有传递代理信息 p 或 proxy 的选项 并且它也不使用系统 http proxy 和 https proxy env 变量 即使我为 libssl so 和
  • 应避免使用 flatDirs,因为它不支持任何元数据格式

    在 Android Studio 中构建时 我看到以下警告 应避免使用 flatDirs 因为它不支持任何元数据格式 我正在与本地打包的 aar 集成libs目录 是否有另一种集成方法 无需将以下有问题的块添加到我的build gradle
  • if comment.name == user 无法正常工作

    我希望用户能够删除他们写的评论 不幸的是 我无法让 if 语句发挥作用 if comment name user a href delete this comment a endif 所以我可以看到 user 和 comment name
  • Cocoa 脚本:接受并返回 NSData

    为了支持我的可编写脚本的 Mac 应用程序中的二进制数据交换 我希望能够使用 AS ObjC 桥接器以 NSData 形式接收和传递数据 如果可能的话 例如 我喜欢在 AppleScript 中实现以下代码 use framework Fo