设置NSDocument以保存非本机类型

时间:2013-12-23 16:05:34

标签: objective-c cocoa nsdocument

我的应用程序有一个自定义格式,它在Info.plist中注册为编辑器,可以读取和写入该格式。它还可以读取许多其他格式,但不能写入它们。对于这些格式,它在Info.plist中注册为查看器。

当我打开其他格式之一时,一切似乎都很好,但是当我来保存文件时,我的NSDocument会发送消息writeToURL:ofType:error:,其中包含我加载的文件的URL,类型为UTI我不能写的格式。

-(NSArray *)writableTypes仅返回我的自定义格式的UTI,而-(BOOL)isNativeType:仅为我的自定义格式的UTI返回YES。

我想做的是,像其他具有原生格式但可以从其他格式读取的应用程序,当用户按下“保存”时,将打开保存面板,用户选择要保存为文件名的文件名。本地类型。

这是NSDocument可以自行完成的事情,还是我需要检查writeToURL:ofType:error:以查看是否需要手动打开保存面板?

1 个答案:

答案 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

中的建议