使用NSDocument时保存文件

时间:2009-12-31 17:51:14

标签: cocoa nsdocument

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

提前致谢。

2 个答案:

答案 0 :(得分: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…]

其次,根据NSAttributedString的文档,dataFromRange:documentAttributes:error:“需要一个文档属性字典dict,至少指定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的实现,但是经过相当长的一段时间后,我发现了这个问题,即使我已经完全复制了Apple的实现。

希望这有助于其他人。

答案 1 :(得分:0)

很久以前

Apple answered this for you