【问题标题】:Swift 4: Issues copying a String to Clipboard using NSPasteboardSwift 4:使用 NSPasteboard 将字符串复制到剪贴板的问题
【发布时间】:2018-08-19 02:19:09
【问题描述】:

我让这一切都在 Swift 3 和更早版本中工作,但在 Swift 4 中,无论我使用什么变体,此代码都会将文本输出为 URL。如果我输入“这是我的示例文本”,粘贴剪贴板后的输出将是“This%20is%20my%20sample%20text”。我已经尝试过 KuTTypeFileURL 但这似乎也没有任何区别。我在这里想念什么?我已经看到有关 Apple 如何更改 Pboards 和其他沙盒问题的帖子和讨论,但我似乎根本无法弄清楚这一点。

原始代码在 swift 3 及更早版本中的工作原理

private func copyToClipBoard(textToCopy: String) {
    let pasteBoard = NSPasteboard.general()
    pasteBoard.clearContents()
    pasteBoard.setString(textToCopy, forType: NSStringPboardType)

}

这给出了一个错误 'NSStringPboardType' 在 Swift 中不可用:使用 'PasteboardType.string'

在网上搜索后,我遇到了描述相同问题的这些帖子,解决方法是使用 kuTTypeUrl 作为字符串

在这里可以找到 stackoverflow.com/questions/44537356/… 和 forums.developer.apple.com/thread/79144

当我以这种方式尝试时,它只是在我只需要一个字符串时输出为一个 URL。

@IBOutlet weak var nameTextField: NSTextField!

@IBAction func nameCopy(_ sender: Any) {
    copyToClipBoard(textToCopy: nameTextField.stringValue)
}


let NSStringPboardType = NSPasteboard.PasteboardType(kUTTypeURL as String)

private func copyToClipBoard(textToCopy: String) {
    let pasteBoard = NSPasteboard.general
    pasteBoard.clearContents()
    pasteBoard.setString(textToCopy, forType: NSStringPboardType)
}

【问题讨论】:

  • 如果您不希望将字符串视为 URL,为什么要将类型设置为 kUTTypeURL?请在您的问题中添加足够的代码,以充分展示您的问题,显示您希望如何设置字符串以及如何读取字符串。
  • 我用更多信息更新了帖子,以解释我为什么使用 kUTTypeURL。这是我在网上寻找解决方案时发现的一种解决方法。抱歉,如果我最初没有提供足够的信息。

标签: swift clipboard nspasteboard pasteboard


【解决方案1】:

您正在粘贴一个 URL,因为您创建了一个 PasteboardTypekUTTypeURL

解决办法就简单多了,有一个预定义的string类型

private func copyToClipBoard(textToCopy: String) {
    let pasteBoard = NSPasteboard.general
    pasteBoard.clearContents()
    pasteBoard.setString(textToCopy, forType: .string)

}

documentation中的注释

采用 App Sandbox 的应用无法访问使用字符串粘贴板类型标识的文件。相反,请使用 NSURL 对象、书签或文件名粘贴板类型。

文件(又名字符串路径)有关,与常规字符串无关

【讨论】:

  • 我最初在 Swift 3 及更早版本中以这种方式编码,但现在在 Swift 4 中出现错误“'NSStringPboardType' 在 Swift 中不可用:使用 'PasteboardType.string'”。在网上进行了一些挖掘之后,解决方法是使用 kUTTypeUrl。在这里找到stackoverflow.com/questions/44537356/… 和这里forums.developer.apple.com/thread/79144
  • 如何复制带有字体样式的字体?
猜你喜欢
  • 1970-01-01
  • 2013-11-21
  • 2010-10-09
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
相关资源
最近更新 更多