2016-06-02 2 views
0

매우 복잡한 작업 집합을 지원하는 앱을 만들고 있습니다. 주 문서는 프로젝트 윈도우와 같이 무수히 많은 항목이있는 Xcode와 비슷합니다. 디스크에있는 문서는 번들입니다 (즉, & 폴더 구조 밑의 파일이있는 디렉토리를 의미합니다).넌 - 네이티브 파일 형식을 가져오고 내보내는 복잡한 NSDocument 기반 응용 프로그램을 구현하는 방법은 무엇입니까?

가져 오기/내보내기 (.mfst) 할 수있는 파일 형식이 하나 이상 있지만이 파일 형식을 직접 편집 할 수 없습니다. 즉,이 파일 유형을 열면 원시 문서 유형이 만들어지고 파일로 가져 오는 파일의 내용이 생성됩니다. 디스크에있는 파일은 번들 ( .mproj)이며 여기에 수많은 파일이 들어 있습니다.

기술적으로 파일은 원본 문서 묶음의 올바른 위치에 그대로 복사됩니다. 해당 파일에 포함 된 데이터의 변경 사항은 가져온 사본이 아닌 번들의 사본에 저장됩니다.

해당 파일 형식도 내보낼 수 있습니다.

질문 1 :이 앱은 가져온 유형의 뷰어입니까, 아니면 편집자입니까? 나는 그것이 이전의 것이라고 생각한다.

질문 2 : 수입 유형을 지원에This question는 NSDocument 서브 클래스를 통해 수입을 구현하는 방법을 보여줍니다,하지만 아마도 NSDocumentController를 서브 클래 싱하여 갈 수있는 좋은 방법입니다 것으로 보인다.

사용자가 이미 .mfst 파일을 가져온 경우 그 사실을 파악하고 싶습니다. 열려있는 문서와 관련된 다른 파일이 있으며 새 파일을 만드는 대신 해당 문서로 가져와야합니다.

질문 3 : 아쉽게도 프로젝트에서 작동하는 코드 중 일부는 디스크에 특정 파일이 있어야합니다. 즉, 가져올 수있는 파일 형식을 여는 것에 대한 응답으로 새 문서가 만들어 지더라도 디스크에 번들을 만들고 파일을 복사하여 작업 할 수 있도록해야합니다. 나는 그것이 제목없는 저장되지 않은 문서라는 착각을 사용자에게주고 싶습니다. 그게 가능하니?

나는 이것이 애플의 "현대적"개념, 즉 저장 될 필요가없는 문서에 반하는 것을 알고있다. 모든 작업을 자동 저장하는 것이 더 나을 것입니다. 저는 문서를 명시 적으로 저장할 수 없다는 점을 결코 알지 못했습니다. 나는 요즘 권장 UI가 무엇인지 잘 모르겠다. (애플은이 과정을 거꾸로 진행 한 것 같다.)

을 환영합니다. 이 파일을 변경할 수 없기 때문에

답변

1
  1. 동작은 원본 파일의 뷰어처럼 들린다.

    내 보낸 파일 형식의 경우 UTExportedTypeDeclarations 키 값을 사용하여 응용 프로그램의 Info.plist 파일에 추가하십시오. Font Pestle의 예는 다음과 같습니다. 글꼴 유 열거 나 편집 CSS,하지만 형식을 내보낼 않습니다하지 않습니다

    <key>UTExportedTypeDeclarations</key> 
        <array> 
         <dict> 
          <key>UTTypeConformsTo</key> 
          <array> 
           <string>public.source-code</string> 
           <string>public.utf8-plain-text</string> 
          </array> 
          <key>UTTypeDescription</key> 
          <string>Cascading Style Sheet</string> 
          <key>UTTypeIdentifier</key> 
          <string>eu.miln.font-pestle.css</string> 
          <key>UTTypeReferenceURL</key> 
          <string>http://www.w3.org/Style/CSS/</string> 
          <key>UTTypeTagSpecification</key> 
          <dict> 
           <key>public.filename-extension</key> 
           <array> 
            <string>css</string> 
           </array> 
          </dict> 
         </dict> 
    
  2. 서브 클래 싱 NSDocumentController이 파일을 열되는 이전에 가져온 사본을 확인하기 위해 적절한 장소입니다.당신 자신이 당신의 NSDocumentController 하위 클래스에서 수백 줄의 코드를 작성 찾을 경우

    , 당신의 디자인을 재고. 서브 클래 싱은 최소한으로해야합니다. NSFileWrapper에 대한

  3. 는 사용 NSDocument의 지원.

    NSFileWrapper는 관리 번들 기반 문서를 쉽게 수 있도록 설계되었습니다. NSDocumentNSFileWrapper는 사용자가 적극적으로 저장하거나 문서의 대상을 선택해야합니다 전에 문서화하여 제목의 임시 사본을 저장 처리합니다.

은 내가보기 엔 애플의 About the Cocoa Document Architecture을 읽고 가깝게 가능한 한 지침을 권장합니다. 이렇게하면 시간을 절약 할 수 있으며, Apple이 기본 프레임 워크를 발전시킬 때 응용 프로그램을보다 쉽게 ​​유지 관리 할 수 ​​있습니다.

+0

예, 나는 감사를 다음 왔습니다. 그리고 네, 이미 NSFileWrapper 지원을 사용하고 있습니다 (초기 단계). 그래서, 앱이 파일 형식을 수출하더라도, 그것은 여전히 ​​뷰어입니까? – Rick

+0

문서 아키텍처 링크를 이미 찾았습니다. 나는 대답을 연장했다. 응용 프로그램의'Info.plist' 파일의'UTExportedTypeDeclarations' 섹션에 내보낼 수있는 파일 유형을 선언하십시오. –

관련 문제