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 に、ドキュメントによるとNSAttributedString
、dataFromRange: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と同じエラーに対して自分の頭をかなりの時間ぶつけた後、これを発見しました。
これが他の誰かに役立つことを願っています。