1

NSDocument を使用してアプリケーションを作成しています。MyDocument.xib には、NSScrollView に NSTextView があります。保存するために ⌘S を実行すると、エラー メッセージが表示されます (「ドキュメント "無題" は "無題.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…]には、文書で指定されたデータの想定構造を与える必要があります。

第 2 に、ドキュメントによるとNSAttributedStringdataFromRange:documentAttributes:error:「書き込む形式を決定するには、少なくとも NSDocumentTypeDocumentAttribute を指定するドキュメント属性ディクショナリ dict が必要です。」

したがって、実装例は少なくとも

- (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の実装を逐語的にコピーしたにもかかわらず、OPと同じエラーに対して自分の頭をかなりの時間ぶつけた後、これを発見しました。

これが他の誰かに役立つことを願っています。

于 2010-04-30T20:59:05.827 に答える
0

アップルはずっと前にあなたのためにこれに答えました。

于 2009-12-31T17:54:22.917 に答える