Jeśli twoja podklasa NSDoc obsługuje automatyczne zapisywanie w miejscu, a wszystkie typy zapisu są również czytelne (tak jak powinny być), poleciłbym użyć już dostarczonego procesu konwersji typu, w którym użytkownik powinien użyć "Duplikatu" przez "Zapisz".
W tym przepływie pracy, gdy użytkownik "duplikuje" dokument, jest zapisywany/kopiowany do pliku tymczasowego (w którym zapisywane są automatycznie zapisywane pliki) jako dokument bez tytułu. Gdy użytkownik zamknie okno dokumentu, aplikacja zasugeruje jej zapisanie dokumentu lub usunięcie go. Ponieważ dokument nie ma jeszcze stałego URL, pojawi się NSSavePanel z widokiem akcesoriów, który pozwala użytkownikowi wybrać typ dokumentu.
W tym rozwiązaniu wszystko zostało już dostarczone przez Cocoa i nie trzeba robić nic, aby obsługiwać specjalną funkcję "Eksportuj", ponieważ użytkownik może użyć "Duplikatu", a następnie "Zapisz". Musisz tylko mieć możliwość zapisania dokumentu do wszystkich typów zapisu z poziomu dataOfType:error:
lub fileWrapperOfType:error:
według argumentu typeName
(jak powiedział Sven).
Zaletą jest to, że użytkownik musi wybrać adres URL tylko wtedy, gdy zamyka plik (i nie chce go usunąć) - i jest zgodny z nowym przepływem pracy w aplikacjach opartych na dokumentach, w których operacja "zapisz jako" został zastąpiony przez "duplicate", a następnie "save".
Pamiętaj, że musisz również upewnić się, że możesz duplikować dokumenty dokumentów, które nie są zapisywalne (możesz to osiągnąć, kopiując oryginalny plik zamiast używać writeSafelyToURL:ofType:forSaveOperation:error:
).
Czy to oznacza, że posiadanie różnych podklas dla każdego typu nie jest zalecane? – hpique
Dokładnie. Twoja klasa "NSDocument" powinna reprezentować pewien rodzaj dokumentu (dokument tekstowy, rysunek, ...) niezależnie od formatu pliku na dysku. – Sven
Dokumentacja (ten sam link, który podałeś) zawiera sekcję o nazwie "Wiele typów dokumentów używa wielu podklas NSDocument". Z tego wnioskuję, że powinieneś obsługiwać tylko jeden typ na podklasę NSDocument. – hpique