第10,多文档架构
当前的应用程序主要分为两类,一类就是前面几张讲解的对话框程序,另一类,就是基于文档的应用程序,与MFC不同的是,MFC有多文档和单文档的差别,而Cocoa则只有多文档的架构,并没有刻意,去区分多文档结构和单文档结构。
关键点:
1、架构的概述,对于COCOA来说,它提供了各种类来支持多文档的架构,包括NSDocument,NSDocumentController,NSWindowController来支持多文档的结构,此外还提供了info.plist达到支持的文档类型的方式来支持文档。他们之间的相互调用关系如下:
每一需要打开的文件,需要对应一个NSDocumentController对象,确可以对应多个NSDocument对象,然后一个NSDocument对象可以对应多个NSWindowController对象,而每个NSWindowController对象可以对应一个NSWindow对象,NSWindow对象的直接目的就是为了显示文档内容,编辑文档内容等等。
2、NSDocumentController对象对应了主菜单上提供的文档的菜单操作,包括open,close,等等。
3、在xcode当中提供了基于文档的模版,该模版当中,提供了NSWindowController和NSDocumentController的默认对象,因此并不需要开发人员编写,这样做据apple的想法,应该目的就是简化多文档架构程序的开发周期。所以在使用模版开发时,关键在于编写NSDocument的子类实现而已。
4、NSDocument之类提供的关键方法:
-(NString *)windowNibName
-(void)windowControllerDidLoadNib
-(NSData*)dataOfType:(NSString*)typename error:(NSError**)outError // 主要用于保存操作。
-(BOOL)readFromData:(NSData*)data ofType:(NSString*)typeName error:(NSError*)outError // 主要用于读取文件的内容。
第11,多信息文本的处理
关键点
1、支持的文本数据类型,包括rtf,rtfd(这个数据类型就是多信息文本数据类型,该类型可以包括属性,因此通常使用NSAttributeString方式处理,而且,RTFD其实是个包类型,该类型会将文件的图片,文档以文件包的形式存储。)
2、对于RTFD类型文件,存取和读取使用如下函数:
-(BOOL)readFromFileWrapper:(NSFileWrapper*)fileWraper ofType:(NSString*)typeName error:(NSWrror**)outError
-(NSFileWrapper*)fileWrapperOfType:(NSString*)typeName error:(NSError**)outError