1

我正在使用 NSDocument 创建一个应用程序。MyDocument.xib 在 NSScrollView 中只有一个 NSTextView。当我执行 ⌘S 保存它时,我收到一条错误消息('无法将文档“Untitled”保存为“Untitled.rubytext”。')。如何让我的应用程序将其保存为 RTF 文件?我的意思是使用 NSDocument (我猜是 dataRepresentationOfType 但我不确定?)

提前致谢。

4

2 回答 2

8

我想补充一点,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…]给出文件中指定的数据的假定结构。

其次,根据文档NSAttributedStringdataFromRange: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 的实现,但我在相当长的一段时间后发现了这一点。

希望这对其他人有帮助。

于 2010-04-30T20:59:05.827 回答
0

苹果很久以前就为你回答了这个问题。

于 2009-12-31T17:54:22.917 回答