2016-06-02 4 views
0

Я работаю над приложением, которое поддерживает очень сложный набор операций. Это похоже на нечто вроде Xcode, поскольку основной документ представлен чем-то вроде окна проекта с многочисленными записями в нем. Документ на диске представляет собой набор (это означает каталог с файлом).Как реализовать сложное приложение на основе NSDocument, которое импортирует и экспортирует не-родные типы файлов?

Существует, по крайней мере, один тип файла, который он может импортировать и экспортировать (.mfst), но он не предназначен для прямого редактирования этого типа файла. То есть, открытие этого типа файла приводит к созданию собственного типа документа и содержимого импортируемого в него файла. На диске файл представляет собой набор ( .mproj) с многочисленными файлами, содержащимися в нем.

Технически этот файл скопирован дословно в соответствующее место внутри собственного пакета документов. Любые изменения в данных, содержащихся в этом файле, сохраняются в копии в комплекте, а не в копии, которая была импортирована.

Этот тип файла также может быть экспортирован.

Вопрос 1: Является ли это приложение средством просмотра импортированного типа или редактора? Я думаю, что это первый.

Вопрос 2:This question на поддержку импортируемых видов показывает, как реализовать импорт с помощью подкласса NSDocument, но мне кажется, что, возможно, подклассов NSDocumentController хороший путь.

Одна из причин этого заключается в том, что если пользователь уже импортировал файл .mfst, я хочу поймать этот факт. Существуют и другие файлы, которые могут быть связаны с открытым документом, и должны импортировать в этот документ, а не создавать новый.

Вопрос 3: К сожалению, некоторые из кода для работы над проектом требуют наличия определенных файлов на диске. Это означает, что даже когда новый документ создается в ответ на открытие типа импортируемого файла, мне нужно продолжить и создать пакет на диске и скопировать файл там, чтобы он мог работать. Я хотел бы поддерживать иллюзию к пользователю, что это безымянный, несохраненный документ. Это возможно?

Я понимаю, что это противоречит «современному» понятию Apple о документах, которые не нужно сохранять. Возможно, было бы лучше всего, чтобы все операции были автоматически сохранены. Я знаю, что мне никогда не нравилось, что я не могу явно сохранить документ. Я на самом деле не уверен, что рекомендуемый пользовательский интерфейс в эти дни (Apple, похоже, изменила курс на этом).

Рекомендации приветствуются.

ответ

1
  1. поведение звучит как просмотра исходного файла, потому что он не может изменить этот файл.

    Для экспортированных типов файлов добавьте их в файл приложения Info.plist, используя значение ключа UTExportedTypeDeclarations. Ниже приведен пример из 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, передумайте свой дизайн. Требуемое подклассу должно быть минимальным.

  3. Опора NSDocument для NSFileWrapper.

    NSFileWrapper предназначен для облегчения управления документами на основе пакетов. NSDocument и NSFileWrapper будут обрабатывать сохранение временных копий вашего документа, не зарегистрированного до того, как пользователь будет активно сохранять или должен выбрать место назначения для документа.

Я настоятельно рекомендую прочитать инструкцию Apple About the Cocoa Document Architecture и следовать ее рекомендациям как можно ближе. Это сэкономит ваше время и, надеюсь, упростит ваше приложение, поскольку Apple разработает свои базовые структуры.

+0

Да, я слежу за этим, спасибо. И да, я уже использую поддержку NSFileWrapper (ранние этапы). Итак, несмотря на то, что приложение экспортирует тип файла, оно все еще является средством просмотра только? – Rick

+0

Замечательно, что вы уже нашли ссылку на архитектуру документации. Я продлил ответ. Объявлять типы экспортируемых файлов в разделе 'UTExportedTypeDeclarations' вашего' Info.plist 'вашего приложения. –

Смежные вопросы