我正在使用 NSDocument 创建一个应用程序。MyDocument.xib 在 NSScrollView 中只有一个 NSTextView。当我执行 ⌘S 保存它时,我收到一条错误消息('无法将文档“Untitled”保存为“Untitled.rubytext”。')。如何让我的应用程序将其保存为 RTF 文件?我的意思是使用 NSDocument (我猜是 dataRepresentationOfType 但我不确定?)
提前致谢。
我正在使用 NSDocument 创建一个应用程序。MyDocument.xib 在 NSScrollView 中只有一个 NSTextView。当我执行 ⌘S 保存它时,我收到一条错误消息('无法将文档“Untitled”保存为“Untitled.rubytext”。')。如何让我的应用程序将其保存为 RTF 文件?我的意思是使用 NSDocument (我猜是 dataRepresentationOfType 但我不确定?)
提前致谢。
我想补充一点,dataForType:error:
链接页面中的示例实现有一些过时或完全不准确的信息。这是我发送给 Apple 的报告:
dataOfType:error:
读取的示例实现:
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
[textView breakUndoCoalescing];
NSData *data = [textView dataFromRange:NSMakeRange(0, [[textView textStorage] length])
documentAttributes:nil
error:outError];
if (!data && outError) {
*outError = [NSError errorWithDomain:NSCocoaErrorDomain
code:NSFileWriteUnknownError userInfo:nil];
}
return data;
}
这有一些问题。一是NSTextView
没有dataFromRange:documentAttributes:error:
方法。这应该[text dataFromRange…]
给出文件中指定的数据的假定结构。
其次,根据文档NSAttributedString
,dataFromRange:documentAttributes:error:
“需要一个文档属性字典字典,至少指定 NSDocumentTypeDocumentAttribute 来确定要写入的格式。”
因此,示例实现至少应该阅读
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
[textView breakUndoCoalescing];
NSData *data = [text dataFromRange:NSMakeRange(0, [[textView textStorage] length])
documentAttributes:[NSDictionary dictionaryWithObjectsAndKeys:NSPlainTextDocumentType, NSDocumentTypeDocumentAttribute, nil]
error:outError];
if (!data && outError) {
*outError = [NSError errorWithDomain:NSCocoaErrorDomain
code:NSFileWriteUnknownError userInfo:nil];
}
return data;
}
或其他一些适用于 RTF 或其他文本值类型的字典值。
虽然看起来 OP 在发布时可能没有看到该文档,但由于文档已损坏,简单地链接到该文档并没有像人们想象的那样有帮助。尽管我已经逐字复制了 Apple 的实现,但我在相当长的一段时间后发现了这一点。
希望这对其他人有帮助。
苹果很久以前就为你回答了这个问题。