如何从 NSDocument 的 read 方法中获取数据
How to get data from NSDocument's read method
我很难尝试将 'data' 放到 NSPasteboard 上。 'data',我指的是特定 PasteboardType 格式以外的类型:文本、HTML、图像等(实际上是 MIDI 数据。)
override func copy() -> Any {
let pboard = NSPasteboard.general
pboard.clearContents()
pboard.setData(data, forType: .typeMidi)
return true
}
当我尝试输入数据时,我得到:
无法将“(String) throws -> Data”类型的值转换为预期的元素类型 'NSPasteboardWriting'。
这可能是因为我一直在尝试使用 NSDocument 的数据方法,但结果证明它只用于写入磁盘。
数据需要来自读取函数:
override func read(from data: Data, ofType typeName: String) throws {
self.theMIDIPlayer = try AVMIDIPlayer.init(data: data, soundBankURL: nil)
if self.theMIDIPlayer == nil {
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
}
但是read
函数的参数好像不是NSDocument的data
函数(只和写有关)。我不知道争论从何而来。
向读取函数添加类似 self.myData = data
的内容(试图获取有用的数据 属性)会产生 "Expected pattern" 错误。
已解决:问题是使用 copy()
而不是 copy(_:)
的小学生错误。
Vadian 现已删除的回答有助于创建自定义粘贴板类型。
完整(相关)代码如下:
extension NSPasteboard.PasteboardType {
static let typeMidi = NSPasteboard.PasteboardType(rawValue: "public.midi-audio")
}
class Document: NSDocument {
var theMIDIPlayer: AVMIDIPlayer?
var myData: Data?
@IBAction func copy(_: Any) {
let pboard = NSPasteboard.general
pboard.clearContents()
pboard.setData(myData, forType: .typeMidi)
}
override func read(from data: Data, ofType typeName: String) throws {
self.theMIDIPlayer = try AVMIDIPlayer.init(data: data, soundBankURL: nil)
self.myData = data
if self.theMIDIPlayer == nil {
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
}
我很难尝试将 'data' 放到 NSPasteboard 上。 'data',我指的是特定 PasteboardType 格式以外的类型:文本、HTML、图像等(实际上是 MIDI 数据。)
override func copy() -> Any {
let pboard = NSPasteboard.general
pboard.clearContents()
pboard.setData(data, forType: .typeMidi)
return true
}
当我尝试输入数据时,我得到:
无法将“(String) throws -> Data”类型的值转换为预期的元素类型 'NSPasteboardWriting'。
这可能是因为我一直在尝试使用 NSDocument 的数据方法,但结果证明它只用于写入磁盘。
数据需要来自读取函数:
override func read(from data: Data, ofType typeName: String) throws {
self.theMIDIPlayer = try AVMIDIPlayer.init(data: data, soundBankURL: nil)
if self.theMIDIPlayer == nil {
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
}
但是read
函数的参数好像不是NSDocument的data
函数(只和写有关)。我不知道争论从何而来。
向读取函数添加类似 self.myData = data
的内容(试图获取有用的数据 属性)会产生 "Expected pattern" 错误。
已解决:问题是使用 copy()
而不是 copy(_:)
的小学生错误。
Vadian 现已删除的回答有助于创建自定义粘贴板类型。
完整(相关)代码如下:
extension NSPasteboard.PasteboardType {
static let typeMidi = NSPasteboard.PasteboardType(rawValue: "public.midi-audio")
}
class Document: NSDocument {
var theMIDIPlayer: AVMIDIPlayer?
var myData: Data?
@IBAction func copy(_: Any) {
let pboard = NSPasteboard.general
pboard.clearContents()
pboard.setData(myData, forType: .typeMidi)
}
override func read(from data: Data, ofType typeName: String) throws {
self.theMIDIPlayer = try AVMIDIPlayer.init(data: data, soundBankURL: nil)
self.myData = data
if self.theMIDIPlayer == nil {
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
}