Cocoa에서 가져오기 전용 문서 유형을 어떻게 생성합니까?
-
13-09-2019 - |
문제
내 응용 프로그램에서 가져오지만 저장하지 않는 파일 형식이 있습니다.문서 유형에 항목을 추가하고 읽기 전용으로 설정했지만, 내가 찾고 있는 가져오기 동작이 발생하지 않습니다.대신 내 앱은 파일을 열 뿐이고, 저장하면 원본 파일이 내 파일 형식으로 덮어쓰여집니다.
원본을 여는 대신 원본 문서의 데이터로 새 문서가 생성되도록 내 문서 또는 문서 유형을 설정하는 방법은 무엇입니까?
해결책
1.파일 형식을 문서 형식으로 선언
Xcode 프로젝트 내에서 문서 유형 귀하의 응용 프로그램이 지원하는 모든 파일 형식에 대해.설정 역할 애플리케이션의 기능에 따라 각 유형을 선택하세요.
- 읽기/쓰기 가능 파일 형식을 다음으로 표시 편집자;
- 가져오기 전용 파일 형식을 다음으로 표시 뷰어.
설정 수업 각 파일 형식을 처리하려는 문서 형식으로 이동합니다.하나의 문서 클래스는 여러 파일 형식을 처리할 수 있습니다.
아래 예에는 세 가지 파일 형식이 선언되어 있습니다.글꼴 유봉, otf 및 ttf.첫 번째 글꼴-페슬(font-pestle)은 애플리케이션의 기본 형식입니다.이 유형에는 역할이 있습니다. 편집자.
나머지 두 가지 형식인 otf 및 ttf는 가져올 수 있지만 응용 프로그램에서 쓸 수는 없습니다.따라서 그들은 다음과 같이 표시됩니다 뷰어.
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:
(또는 더 나은 이름을 가진 것 :-)) 제목 없는 새 문서를 만들고 가져온 파일의 내용을 읽습니다.