1. Объявлять типы файлов как типы документов
В рамках проекта Xcode добавьте Тип документа для всех форматов файлов, поддерживаемых вашим приложением. Задайте роль каждого типа в соответствии с возможностями вашего приложения:
- Отметьте типы файлов для чтения / записи в качестве редактора ;
- Отметить импортировать только типы файлов в качестве средства просмотра .
Установите класс в тип документа, который вы хотите обрабатывать с каждым типом файла. Один класс документа может обрабатывать несколько типов файлов.
В приведенном ниже примере указаны три типа файлов: font-pestle, otf и ttf. Первый, font-pestle - это собственный формат приложения. Этот тип имеет роль Editor .
Остальные два формата: otf и ttf могут быть импортированы, но не записаны приложением; таким образом, они отмечены как Viewer .
2. Дополнительные типы файлов в файле readFromData: ofType: error: subclass
При добавлении типов документов приложение автоматически разрешит пользователям открывать файлы указанных типов.
Вам нужно добавить код обработки типа файла в класс документа. В идеальном случае добавьте код ветвления к методу:- (BOOL)readFromData:(NSData*)someData ofType:(NSString*)typeName error:(NSError**)outError { if ([NSWorkspace.sharedWorkspace type:@"eu.miln.font-pestle" conformsToType:typeName] == YES) { // read native format } else if ([NSWorkspace.sharedWorkspace type:@"public.opentype-font" conformsToType:typeName] == YES) { // read import only format // disassociate document from file; makes document "untitled" self.fileURL = nil; // associate with primary file type self.fileType = @"eu.miln.font-pestle"; } else // ... }
self.fileURL = nil;
Это autosavingFileType
важно. Установив файлURL на нуль, вы говорите, что документ не связан с каким-либо файлом на диске и должен рассматриваться как новый документ.
Чтобы разрешить автосохранение, реализовать - ( BOOL ) readFromData :( NSData *) данные OfType :( NSString *) ошибка TYPENAME :( NSError **) outError { * outError = ноль ; if ([ typeName isEqualToString : @ "SomeReadOnlyType" ]) { // .. (загружать данные здесь) [ self setFileURL : nil ]; результат возврата ; } Еще { // .. (делать все , что вы делаете для других документов здесь) } } способ вернуть первичный тип файла. openDocumentWithContentsOfURL:display:error: