我的应用程序有一个自定义格式,它在Info.plist中注册为编辑器,可以读取和写入该格式。它还可以读取许多其他格式,但不能写入它们。对于这些格式,它在Info.plist中注册为查看器。
当我打开其他格式之一时,一切似乎都很好,但是当我来保存文件时,我的NSDocument会发送消息writeToURL:ofType:error:
,其中包含我加载的文件的URL,类型为UTI我不能写的格式。
-(NSArray *)writableTypes
仅返回我的自定义格式的UTI,而-(BOOL)isNativeType:
仅为我的自定义格式的UTI返回YES。
我想做的是,像其他具有原生格式但可以从其他格式读取的应用程序,当用户按下“保存”时,将打开保存面板,用户选择要保存为文件名的文件名。本地类型。
这是NSDocument可以自行完成的事情,还是我需要检查writeToURL:ofType:error:
以查看是否需要手动打开保存面板?
答案 0 :(得分:3)
回答自己,我发现似乎有效的解决方案是readFromURL:ofType:error:
重置NSDocument
的非原生格式的fileURL,displayName和fileType。
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)type error:(NSError **)error
{
// Handle loading as normal
if (![type isEqualToString:kMyNativeType]) {
[self setFileType:kMyNativeType];
[self setFileURL:nil];
// Without this, all non-native files are displayed as Untitled.
// This sets the window title as the filename without the extension
NSArray *filenameComponents = [[url lastPathComponent] componentsSeparatedByString:@"."];
[self setDisplayName:filenameComponents[0]];
}
return YES;
}
我不知道这是否是正确的方法,但它似乎适用于我现在想要的东西,并且似乎是https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/AdvancedTopics/AdvancedTopics.html#//apple_ref/doc/uid/TP40011179-CH7-SW8
中的建议