Переопределение списка возможных форматов экспорта в NSSaveDialog

У меня есть приложение, которое может загружать сторонний код. Одной из возможностей, которую может выполнять сторонний код, является добавление форматов, в которые приложение может экспортировать. Я использую saveDocumentTo: как средство реализации экспорта.

Я понимаю, что могу настроить меню доступных типов файлов для сохранения, переопределив writableTypesForSaveOperation: для моего документа, но что не работает, так это то, что в диалоговом окне сохранения соответствующее расширение файла не добавляется к имени файла при выборе из меню.

Я пытался переопределить fileNameExtensionForType:saveOperation:, но это даже не вызывается.

Как я могу заставить диалоговое окно «Сохранить» найти правильное расширение файла (при условии, что оно неизвестно во время компиляции)?


person Jakub Hampl    schedule 28.02.2012    source источник


Ответы (1)


Я сделал это в пользовательском представлении аксессуаров экспорта для панели сохранения. Пользовательский вид аксессуаров для экспорта просто изменяет разрешенные типы файлов NSSavePanel всякий раз, когда пользователь меняет формат, в который он хочет экспортировать.

Если вы хотите установить расширение, передайте массив с одним элементом, содержащим это расширение.

В документах есть некоторые важные детали поведения -[NSSavePanel setAllowedFileTypes:] в этом отношении для поддержки более сложных случаев:

Обсуждение

Тип файла может быть общим расширением файла или UTI. Нулевое значение указывает, что можно использовать любой тип файла. Значение по умолчанию равно нулю.

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

NSOpenPanel: в версиях Mac OS X ниже v10.6 это свойство игнорируется. Для приложений, которые связываются с версией 10.6 и выше, это свойство определяет, какие файлы должны быть включены в открытой панели. Использование устаревших методов для отображения открытой панели (тех, которые принимают параметр types:) перезапишет это значение и не должно использоваться. Разрешенные типы файлов можно изменить во время работы панели (например, из дополнительного вида). Тип файла может быть обычным расширением файла или UTI. Это также известно как «включенные типы файлов». Нулевое значение указывает, что все файлы должны быть включены.

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

person justin    schedule 28.02.2012
comment
Если вы делаете специальный вид аксессуаров, как вы устанавливаете расширение? - person Jakub Hampl; 28.02.2012
comment
@JakubHampl ничего себе, просмотрел реализацию, это не так просто, как я написал - спасибо за запрос разъяснений. я обновил ответ, описав, что я сделал, а также добавил механику из документации. - person justin; 28.02.2012