Вы почти находитесь, вам просто нужно реализовать немного больше в 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 на предпочтительное расширение для файлов документов.
Дополнительную информацию о файлах списков свойств см. В разделе “Storing Document Types Information in the Application's Property List” в документе «Обзор приложений на основе документов». Полную информацию о списках свойств приложений см. В Руководстве по настройке времени выполнения.
В принципе, прямо сейчас вы передаёте общий тип DocumentType в этот метод данных, показанный выше. Как только вы заявите в своем Info.plist, что вы можете обрабатывать RTF и RTFD данные (в виде двух отдельных записей), вы будете переданы другим способом в этом методе, в зависимости от того, что пользователь выбрал во всплывающей кнопке Format в NSSavePanel , Вы можете проверить значение пройденного типа, а затем указать соответственно тип NSRTFTextDocumentType или NSRTFDTextDocumentType.
Возможно, вы можете использовать Info.plist TextEdit для использования в качестве основы ваших типов документов, хотя обязательно замените имя подкласса NSDocument на свой собственный, чтобы NSDocumentController знал, какой класс использовать.
Покажите нам, что вы на самом деле делаете, чтобы сохранить документ в настоящий момент –