【发布时间】:2014-02-26 15:34:20
【问题描述】:
我正在开发一个基于 NSDocument 的应用程序,它的文档类型是包含一堆文件的包包。我这样保存它:
- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError
{
if (!self.documentFileWrapper) {
NSFileWrapper *documentFileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
[self setDocumentFileWrapper:documentFileWrapper];
}
NSFileWrapper *defaultWrapper = [self.documentFileWrapper.fileWrappers objectForKey:@"default"];
if (!defaultWrapper) {
defaultWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
[defaultWrapper setPreferredFilename:@"someFile.ext"];
[self.documentFileWrapper addFileWrapper:defaultWrapper];
}
[defaultWrapper addRegularFileWithContents: ... some computed content for the file ... preferredFilename:@"someFile.ext"];
return self.documentFileWrapper;
}
换句话说,在包中,创建一个文件夹“default”,并将“someFile.ext”和一些内容一起保存到其中。
现在,问题来了。当我查看磁盘上实际保存的内容时,我看到了:
每次我保存文件时,NSDocument 包装器似乎都会创建资源的一些版本控制副本。我不想要版本控制的克隆,我只想要具有最新内容的原版文件。
版本化资源从何而来?这里发生了什么?有我应该阅读的文档吗?
【问题讨论】:
-
+ (BOOL)preservesVersions返回值 YES,如果 NSDocument 的接收子类支持版本;否则否。 -
好吧,我至少可以确认您列出的额外文件的存在,即使当
+ (BOOL)preservesVersions返回 NO 时,无论+ (BOOL)autosavesInPlace返回什么。更改这两个函数的返回值确实会影响菜单中启用的选项,因此它们正在被查询。如果我发现其他任何东西,我会告诉你的。
标签: appkit nsdocument nsfilewrapper