我在这里用本教程制作一个基本的文本编辑器: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextArchitecture/Tasks/TextEditor.html
我的文本编辑器可以以RTF和TXT格式保存,编写和打开文档,但无法将图形与任何文本一起保存。保存格式化文本,当窗口打开时图形会显示,但不会保存。
答案 0 :(得分:1)
你几乎就在那里,你只需要在应用的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的Resources文件夹中的应用程序属性列表文件中配置文档类型设置。 (Xcode模板使用您的项目名称命名文件,后跟-Info.plist。)您可以通过选择Groups&中的文件在Xcode中编辑此文件。文件列表并使用内置编辑器。单击显示三角形,将CFBundleTypeExtensions下第一个项目的值编辑为文档文件的首选扩展名。
有关属性列表文件的更多信息,请参阅基于文档的应用程序概述中的“Storing Document Types Information in the Application's Property List”。有关应用程序属性列表的完整详细信息,请参阅运行时配置指南。
基本上,现在,您正在传递上面显示的数据方法中的通用DocumentType。一旦您在Info.plist中声明可以处理RTF和RTFD数据(作为2个单独的条目),您将在该方法中传递不同的值,具体取决于用户在NSSavePanel的“格式”弹出按钮中选择的内容。您可以检查传入类型的值,然后相应地指定NSRTFTextDocumentType或NSRTFDTextDocumentType。
您可以查看TextEdit的Info.plist以用作Document类型的基础,但请务必将NSDocument子类名称更改为您自己的名称,以便NSDocumentController知道要使用的类。
答案 1 :(得分:0)
也许您的图片未保存在同一目录中?
例如,如果我使用TextEdit创建一个rtf文档,它会创建一个名为something.rtfd
的文件夹,其中包含TXT.rtf
和所有图像。