Сохранение графического изображения в текстовом редакторе? - PullRequest
1 голос
/ 13 декабря 2010

Я делаю основной текстовый редактор из этого урока здесь: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextArchitecture/Tasks/TextEditor.html

Мой текстовый редактор может сохранять, писать и открывать документы в форматах RTF и TXT, но не может сохранять графику вместе с любым текстом. Отформатированный текст сохраняется, и изображение отображается, когда окно открыто, но не сохраняется.

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Вы почти у цели, вам просто нужно добавить немного больше в 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 знал, какой класс использовать.

0 голосов
/ 13 декабря 2010

может быть, ваши изображения не сохранены в одном каталоге?например, если я создаю документ RTF с TextEdit, он создает папку с именем something.rtfd и содержит TXT.rtf и все изображения.

...