kid*_*opp 2 clipboard pasteboard nspasteboard swift
我在 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)
}
Run Code Online (Sandbox Code Playgroud)
这给出了 '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)
}
Run Code Online (Sandbox Code Playgroud)
您正在粘贴一个 URL,因为您创建了一个PasteboardType kUTType URL。
解决方法就简单多了,有一个预定义的string类型
private func copyToClipBoard(textToCopy: String) {
let pasteBoard = NSPasteboard.general
pasteBoard.clearContents()
pasteBoard.setString(textToCopy, forType: .string)
}
Run Code Online (Sandbox Code Playgroud)
文档中的注释
采用应用沙盒的应用无法访问使用字符串粘贴板类型标识的文件。相反,使用 NSURL 对象、书签或文件名粘贴板类型。
与文件(又名字符串路径)相关,与常规字符串无关