有一个文件类型我的应用程序导入但不保存.我已经在文档类型中添加了一个条目并将其设置为只读,但这不会产生我正在寻找的导入行为.相反,我的应用程序将只打开文件,当我保存原始文件时,将以我自己的文件格式覆盖.
如何设置我的文档或文档类型,以便使用原始文档中的数据创建新文档,而不是打开原始文档?
在Xcode项目中,为应用程序支持的所有文件格式添加文档类型.根据应用程序的能力设置每种类型的角色:
将具有读/写功能的文件类型标记为编辑器 ;
标记仅将文件类型导入为Viewer.
将Class设置为要处理每种文件类型的文档类型.一个文档类可以处理多种文件类型.
在下面的示例中,声明了三种文件类型:font-pestle,otf和ttf.第一个是font-pestle,是应用程序的原生格式.此类型具有角色编辑器.
其余两种格式otf和ttf可以导入但不能由应用程序写入; 因此它们被标记为查看者.
添加文档类型后,应用程序将自动允许用户打开指定类型的文件.
您需要将文件类型处理代码添加到文档类.在理想情况下,将分支代码添加到readFromData:ofType:error:
方法中:
- (BOOL)readFromData:(NSData*)someData ofType:(NSString*)typeName error:(NSError**)outError { if ([NSWorkspace.sharedWorkspace type:@"eu.miln.font-pestle" conformsToType:typeName] == YES) { // read native format } else if ([NSWorkspace.sharedWorkspace type:@"public.opentype-font" conformsToType:typeName] == YES) { // read import only format // disassociate document from file; makes document "untitled" self.fileURL = nil; // associate with primary file type self.fileType = @"eu.miln.font-pestle"; } else // ... }
这self.fileURL = nil;
很重要.通过将fileURL设置为nil,您说该文档与任何磁盘文件都没有关联,应该被视为新文档.
要允许自动保存,请实现NSDocument方法autosavingFileType
以返回主文件类型.