2013-01-16 10 views
6

W jaki sposób eksportujesz plik NSDocument w jednym formacie do innego formatu NSDocument w innym formacie?Eksportuj dokument NSDocument w aplikacji Mac

Chciałbym wdrożyć typową opcję Eksportuj w mojej aplikacji opartej na dokumencie. Nie jestem pewien, gdzie powinienem umieścić kod konwersji formatu i co jest już dostarczane przez Cocoa.

Odpowiedz

7

Wszystkie opcje zapisu w NSDocument otrzymują parametr łańcuchowy określający typ pliku, który ma zostać zapisany. Dlatego w metodach dataOfType:error: lub fileWrapperOfType:error: należy zastosować kod konwersji dla każdego typu pliku, który ma być obsługiwany.

Aby rozpocząć operację eksportu, można użyć metody saveToURL:ofType:forSaveOperation:completionHandler: z żądanym typem i operacją składowania NSSaveToOperation.

Aby uzyskać więcej informacji na temat metod, które można przesłonić w celu obsługi ładowania i zapisywania danych dokumentu, należy zapoznać się z this programming guide.

Dostępne typy można uzyskać za pomocą metody klasy writableTypes lub metody instancji writableTypesForSaveOperation:, ponownie za pomocą NSSaveToOperation.

Typy plików, które chcesz obsłużyć, muszą być zadeklarowane w pliku Info.plist.

+0

Czy to oznacza, że ​​posiadanie różnych podklas dla każdego typu nie jest zalecane? – hpique

+1

Dokładnie. Twoja klasa "NSDocument" powinna reprezentować pewien rodzaj dokumentu (dokument tekstowy, rysunek, ...) niezależnie od formatu pliku na dysku. – Sven

+0

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

1

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:).

Powiązane problemy