问题标签 [nspasteboard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4983 浏览

cocoa - 如何在 Mac OS X 10.5 中处理从 Finder 中的多个文件拖放?

我需要从 Finder 中获取所有拖放到我的应用程序中的文件的 URL。

我有一个在 10.6 上运行的 Cocoa 应用程序,它通过使用新的 10.6 NSPasteboard API 来处理粘贴板上的多个项目。我正在尝试将此应用程序反向移植到 10.5。我如何在 10.5 上处理这个问题?

如果我执行以下操作,我只会得到第一个 URL:

0 投票
1 回答
1115 浏览

objective-c - 覆盖粘贴:格式化文本

我想捕获粘贴到控件中的字符串,并在粘贴之前对字符串应用一些自定义格式。

这怎么可能?

谢谢!

0 投票
3 回答
1731 浏览

objective-c - Cocoa 虚拟按键疼痛

我正在编写一个应用程序,通过将突出显示的文本复制到 NSPasteboard 的 generalPasteboard 中来响应热键。在这里寻找发送虚拟击键的解决方案后,我发现了这个:如何在objective-c中向活动应用程序发送“Cmd-C”击键,或者告诉应用程序执行复制操作?

我尝试了使用 NSAppleScript 建议的 applescript:

它有效,但仅在我第一次按下热键时。随后的每次点击都不会抓取突出显示的文本。generalPasteboard 仍然包含与再次运行脚本之前相同的内容。在我运行代码之前清除 generalPasteboard 是没有用的,因为在尝试读取粘贴板内容时代码会失败。这是日志:

所以我尝试了下一个建议的解决方案:

以上应该发送击键命令+ c,但我得到的只是哔声,粘贴板内容没有改变。

我束手无策 - 任何人都可以启发我了解我缺少什么或指出我忽略了什么如此简单的事情吗?

0 投票
3 回答
3140 浏览

cocoa - 如何使用 Cocoa 将文本从一个应用程序粘贴到另一个应用程序?

我已经阅读NSPasteBoard了 Apple 文档,以及它如何允许应用程序写入PasteBoard并允许其他应用程序读取该文本并使用它。

有人可以告诉我如何将来自应用程序(位于状态栏中)的文本粘贴到NSTextField另一个应用程序中。

我想做的是类似于SnippetSnippetsApp所做的事情。

如果我完全愚蠢并且错过了Apple Docs中的明显内容,请您指出正确的路径:)

谢谢!

0 投票
1 回答
1080 浏览

objective-c - 使 OS X 粘贴板崩溃

我有一个应用程序通过模拟 CMD-C 复制命令并读取粘贴板来读取文本 - 不幸的是,这是实现我需要的唯一方法。有时,由于它正在开发中,有时我会做错事(我认为它与复制命令无关)并且应用程序崩溃。有时,这会对系统范围的粘贴板产生连锁反应——如果我尝试复制、剪切或粘贴,任何其他正在运行的应用程序都会崩溃。

有没有一种强大的方法来处理这个问题 - 我应该在退出之前对 NSPasteboard 做些什么?任何有关可能发生的事情的信息表示赞赏。

为了完整起见,这里是访问粘贴板的唯一代码片段:

从粘贴板中读取:

最初清除粘贴板(我只运行一次,在启动时):

PS我忘了提到这个复制命令在一个循环中运行,在一个不同的线程中——可能很重要。虽然我一直小心不要在没有先检查循环是否停止的情况下访问主线程上的粘贴板。

更新 - 关于我在做什么的几个问题......

  • 你能发布崩溃报告吗

现在正在处理它 - 不幸的是,崩溃是不规则的。不过让我说清楚 - 这是一个我仍在开发的应用程序,有时我会引入一个错误。当这导致崩溃时,系统范围的粘贴板有时会变得混乱。看起来我的应用程序中的粘贴板访问并没有导致崩溃,而是在后台循环处于与 PB 交互的微妙阶段时退出。更新 - 重新提交崩溃报告 - 这对你们来说有多重要?我仍在开发中,但可以尝试在调试器中运行几次,直到出现问题。不幸的是,我现在修复了所有未解决的错误并且没有遇到任何崩溃。这向我强烈暗示问题不在于 PBoard 代码本身 - 我更多的是寻找一些保护措施,以便如果发生崩溃,它不会降低我的整个系统。所有这些重新启动都变得烦人。

  • 你能详细说明为什么你需要模拟 Cmd-C 来做你需要的事情吗?

我正在从外部应用程序的聊天框中抓取文本。建立聊天框是为了禁止我使用辅助功能界面或任何其他方式。

  • 为什么要在启动时清除剪贴板的内容?

我检查粘贴板文本中的新文本。这是确保我不处理从其他应用程序复制的文本的快速方法。

  • 你为什么要在一个线程上运行代码?

循环不断发布事件以模拟用户输入,包括切换到聊天窗口和复制选定的文本。如果这是在主线程上完成的,我的应用程序 UI 将挂起。我使用 UI 来显示正在发生的事情的概述。

  • 请显示在主线程上运行的代码并检查循环并访问粘贴板

后台线程使用 NSNotifications 将数据传递给主线程:

0 投票
2 回答
1535 浏览

objective-c - 如何检查 NSPasteboard 是否已更新?

我正在自动执行复制命令,以每秒左右在粘贴板上放置一些文本 - 不幸的是,这是我访问文本的唯一方法,它位于另一个应用程序中。复制后,我访问粘贴板文本并进行处理。

有时,当没有选择任何内容时会发送复制命令 - 例如在 textEdit 中,如果光标位于行尾(而不是突出显示某些文本)并且您点击复制,您会收到系统哔声,因为没有选择任何内容复印。粘贴板不会更新并保留其先前的数据。

我想不出一种创造性的方法来确定何时发生这种情况。如果我发送一个复制命令并且粘贴板没有更新,那么粘贴板上是否有任何类型的时间戳我可以访问以确认某些内容已被捕获或尚未被捕获?

我正在查看changeCount,但我不确定那到底是什么,并且文档对我没有多大帮助-红鲱鱼?

任何简单有效的想法都非常感谢!

0 投票
1 回答
729 浏览

objective-c - 如何将文本字段单元格(在可可中)中的文本复制到 NSPasteboard?

我在 cocoa 中有一个文本字段单元格和一个按钮。我想通过单击按钮复制文本字段中的文本。

在剪贴板.h

在剪贴板.m

我怎样才能改变这个来做到这一点?

0 投票
1 回答
304 浏览

objective-c - 获取 NSTableView 以从 PNG 源注册 drop

试图让它工作,但不确定我错过了什么。这个想法是将图像放在 a 上NSTableView,以便我可以抓住它们的路径并为它们做一些操作。我可以让 drop 工作NSPastebouardTypeString,但我一辈子都不能让它注册从 Finder 拖动 PNG 到 tableview 中。我错过了什么?

相关代码:

0 投票
1 回答
570 浏览

objective-c - NSPasteboard setString:forType: 在 Leopard 下返回 NO,在 Snow Leopard 下正常

以下代码来自NSTableViewDataSource我试图实现拖放的地方。

谁能告诉我为什么setString:forTypes:下面代码中的方法在NOLeopard 下返回?它在雪豹中运行良好。我检查了“可可的粘贴板编程主题”遗留文档,但我无法弄清楚我做错了什么。

0 投票
0 回答
177 浏览

objective-c - 从 Xcode 进行远程调试时,拖动粘贴板为零

我正在编写一个需要在 10.5 和 10.6 中运行的应用程序(我们仍然有 PPC 机器)。我的开发机器是带有 Xcode 3.2.3 的 10.6.4,我有一台带有 Xcode 3.1.2 的 10.5.8 机器。

我使用远程调试来测试 10.5.8 机器上的应用程序,并且我遇到了仅在远程调试时才会出现的拖放方法的问题。

NSTableViewDelegate方法- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard 传递一个 nil NSPasteboard。在 10.6.4 或 10.5.8 中本机运行时不会发生这种情况。

我对 Xcode 和 Objective-C 比较陌生,对 GDB 和 SSH 的基础完全陌生,所以我不知道该怎么做才能找出导致这个问题的原因。

在应用程序启动之前,控制台中还有一些不寻常的消息,不确定是否相关: