Вы почти у цели, вам просто нужно добавить немного больше в Info.plist вашего приложения.
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
NSData *data;
[self setString:[textView textStorage]];
NSMutableDictionary *dict =
[NSDictionary dictionaryWithObject:NSRTFTextDocumentType
forKey:NSDocumentTypeDocumentAttribute];
Обратите внимание, что в методе, который запрашивает данные для сохранения в файл, независимо от того, что он настроен на использование NSRTFTextDocumentType вместо NSRTF * D * TextDocumentType. RTFD означает RTF с вложениями, который сохраняет документ .rtfd, который фактически является пакетом / пакетом (папка, которая представляется пользователю, как если бы это был один файл). Сохранение как NSRTFTextDocumentType будет эффективно отбрасывать материал, который не может вписаться в документ RTF, например изображения.
После шага 12 происходит следующее:
На данном этапе своего развития ваш редактор открывает и сохраняет документы только с расширением ????. Чтобы приложение могло сохранять и открывать документы с распознанным типом файла, вам необходимо использовать XCode для настройки параметров типов документов в файле списка свойств приложения в папке «Ресурсы» в XCode. (Шаблон Xcode присваивает файлу имя с именем вашего проекта, за которым следует -Info.plist.) Вы можете отредактировать этот файл в Xcode, выбрав файл в списке «Группы и файлы» и используя встроенный редактор. Нажмите раскрывающие треугольники, чтобы отредактировать значение первого элемента в CFBundleTypeExtensions до предпочтительного расширения для ваших файлов документов.
Для получения дополнительной информации о файлах списка свойств см. «Хранение информации о типах документов в списке свойств приложения» в Обзоре приложений на основе документов. Для получения полной информации о списках свойств приложения см. Рекомендации по настройке среды выполнения.
По сути, прямо сейчас, вам передается общий DocumentType в том методе данных, как показано выше. Как только вы заявите в своем Info.plist, что вы можете обрабатывать данные RTF и RTFD (как две отдельные записи), вы будете передавать в этом методе другое значение, в зависимости от того, что пользователь выбрал во всплывающей кнопке «Формат» в NSSavePanel. , Вы можете проверить значение переданного типа и затем указать NSRTFTextDocumentType или NSRTFDTextDocumentType соответственно.
Вероятно, вы можете взглянуть на Info.plist TextEdit, чтобы использовать его в качестве основы для ваших типов документов, хотя обязательно измените имя подкласса NSDocument на свое, чтобы NSDocumentController знал, какой класс использовать.