문제

내 응용 프로그램에서 가져오지만 저장하지 않는 파일 형식이 있습니다.문서 유형에 항목을 추가하고 읽기 전용으로 설정했지만, 내가 찾고 있는 가져오기 동작이 발생하지 않습니다.대신 내 앱은 파일을 열 뿐이고, 저장하면 원본 파일이 내 파일 형식으로 덮어쓰여집니다.

원본을 여는 대신 원본 문서의 데이터로 새 문서가 생성되도록 내 문서 또는 문서 유형을 설정하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

1.파일 형식을 문서 형식으로 선언

Xcode 프로젝트 내에서 문서 유형 귀하의 응용 프로그램이 지원하는 모든 파일 형식에 대해.설정 역할 애플리케이션의 기능에 따라 각 유형을 선택하세요.

  • 읽기/쓰기 가능 파일 형식을 다음으로 표시 편집자;
  • 가져오기 전용 파일 형식을 다음으로 표시 뷰어.

설정 수업 각 파일 형식을 처리하려는 문서 형식으로 이동합니다.하나의 문서 클래스는 여러 파일 형식을 처리할 수 있습니다.

아래 예에는 세 가지 파일 형식이 선언되어 있습니다.글꼴 유봉, otf 및 ttf.첫 번째 글꼴-페슬(font-pestle)은 애플리케이션의 기본 형식입니다.이 유형에는 역할이 있습니다. 편집자.

나머지 두 가지 형식인 otf 및 ttf는 가져올 수 있지만 응용 프로그램에서 쓸 수는 없습니다.따라서 그들은 다음과 같이 표시됩니다 뷰어.

Example Document Types

2.NSDocument 하위 클래스의 추가 파일 형식

문서 유형이 추가되면 응용 프로그램은 자동으로 사용자가 지정된 유형의 파일을 열 수 있도록 허용합니다.

문서 클래스에 파일 형식 처리 코드를 추가해야 합니다.이상적인 경우에는 분기 코드를 readFromData:ofType:error: 방법:

- (BOOL)readFromData:(NSData*)someData ofType:(NSString*)typeName error:(NSError**)outError
{
    if ([NSWorkspace.sharedWorkspace type:@"eu.miln.font-pestle" conformsToType:typeName] == YES)
    {
        // read native format
    }
    else if ([NSWorkspace.sharedWorkspace type:@"public.opentype-font" conformsToType:typeName] == YES)
    {
        // read import only format

        // disassociate document from file; makes document "untitled"
        self.fileURL = nil;
        // associate with primary file type
        self.fileType = @"eu.miln.font-pestle";

    }
    else // ...

}

그만큼 self.fileURL = nil; 중요하다.fileURL을 nil로 설정하면 문서가 디스크에 있는 파일과 연결되어 있지 않으며 새 문서로 처리되어야 한다는 의미입니다.

자동 저장을 허용하려면 NSDocument 메소드를 구현하십시오. autosavingFileType 기본 파일 형식을 반환합니다.

다른 팁

Alex, 답변해 주셔서 감사합니다. 하지만 좀 더 마음에 드는 방법을 찾았습니다.

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName
               error:(NSError **)outError
{
    *outError = nil;
    if ([typeName isEqualToString:@"SomeReadOnlyType"])
    {
        // .. (load data here)
        [self setFileURL:nil];

        return result;
    }
    else
    {
        // .. (do whatever you do for other documents here)
    }
}

이런 식으로 내 문서 시스템을 롤링하는 대신 Cocoa에서 제공하는 문서 시스템을 사용하는 것이 여전히 가능합니다.

또한 여기에 솔루션을 문서화했습니다. http://www.cocoadev.com/index.pl?CFBundleTypeRole 페이지 조금 아래로.

저는 Cocoa에서 가져오기 기능이 기본적으로 지원된다고 생각하지 않습니다.사용자가 열기 패널에서 열기 버튼을 클릭하면 프레임워크는 openDocumentWithContentsOfURL:display:error: ~에 NSDocumentController.여기에서 문서 시스템은 사용자가 열고 있는 파일의 유형을 파악하고 Info.plist 파일을 참조하여 어떤 유형의 파일인지 알아냅니다. NSDocument 문서를 여는 데 사용할 하위 클래스입니다.

하위 클래스로 분류할 수 있습니다. NSDocumentController 그리고 openDocumentWithContentsOfURL:display:error: 열지 않고 가져와야 하는 파일 형식을 가로채는 방법입니다.당신의 NSDocument 하위 클래스, 다음과 같은 이름으로 새 초기화 프로그램을 작성하세요. initWithImportedContentsOfURL:type:error: (또는 더 나은 이름을 가진 것 :-)) 제목 없는 새 문서를 만들고 가져온 파일의 내용을 읽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top