2009-12-31 7 views
1

NSDocument를 사용하여 응용 프로그램을 만들고 있습니다. MyDocument.xib에는 NSScrollView에 NSTextView가 있습니다. ⌘S를 사용하여 저장하면 오류 메시지가 나타납니다 ('문서 "Untitled"를 "Untitled.rubytext"로 저장할 수 없습니다.'). 내 응용 프로그램을 RTF 파일로 저장하려면 어떻게합니까? NSDocument를 사용하는 것을 의미합니다 (dataRepresentationOfType이 맞는지는 모르겠지만 확실하지 않습니까?)NSDocument를 사용할 때 파일 저장

미리 감사드립니다.

답변

0

Apple answered this for you 매우 오래 전입니다.

+0

고마워, 내가 살펴 봐야 해 –

+2

이 링크가 존재하지 않습니다. 그래서 귀하의 의견에 솔루션을 포함해야합니다. – Yepher

8

링크 된 페이지에서 dataForType:error:의 구현 예는 구식이거나 부정확 한 정보를 포함하고 있다고 덧붙이고 싶습니다.

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는 게시 당시 문서를 보지 못했지만 문서에 연결하면 문서가 손상되어 생각만큼 도움이되지 않습니다. 나는 오랫동안 애플의 구현을 그대로 복사했지만 OP와 같은 오류에 대해 내 머리를 두드린 후 이것을 발견했다.

다른 사람에게 도움이되기를 바랍니다.

관련 문제