我的NSDocument子类使用捆绑文档类型,它使用fileWrapperOfType:error:将数据写入磁盘。这很好用,但最终它会开始用像“2_ #$!@%!# _info.plist”这样的乱码来保存文件,而不是覆盖正确的文件。
我不知道导致问题的变化是什么,但我认为这是权限相关的,因为即使“stat”返回“drwxr-xr-x”这是业主可以写的,Finder也不会让我在包内写。
NSFileWrapper或NSDocument是否搞砸了权限或什么?我是这个API的新手,但这里是我在下面使用的代码(在Objective Pascal中),希望所有人都能阅读。
function TScriptDocument.fileWrapperOfType_error (typeName: NSString; outError: NSErrorPtr): NSFileWrapper;
var
fileWrappers: NSDictionary;
propertiesFileWrapper: NSFileWrapper;
data: NSData;
propertiesName: NSString;
begin
if documentFileWrapper = nil then
documentFileWrapper := NSFileWrapper.alloc.initDirectoryWithFileWrappers(nil);
fileWrappers := documentFileWrapper.fileWrappers;
propertiesName := NSSTR('info.plist');
propertiesFileWrapper := fileWrappers.objectForKey(propertiesName);
if propertiesFileWrapper <> nil then
documentFileWrapper.removeFileWrapper(propertiesFileWrapper);
data := NSPropertyListSerialization.dataWithPropertyList_format_options_error(script.GetProperties, NSPropertyListXMLFormat_v1_0, 0, nil);
if data <> nil then
documentFileWrapper.addRegularFileWithContents_preferredFileName(data, propertiesName);
result := documentFileWrapper;
end;
答案 0 :(得分:0)
我发现在调用fileWrapperOfType_error时保留initDirectoryWithFileWrappers的文件包装器导致了问题。我现在每次使用initWithURL_options_error或initDirectoryWithFileWrappers保存文档时初始化NSFileWrapper的新实例。
但是,我仍然无法修改Finder中的文档包内容,即使我对目录0777进行了修改。可能会对这些内容进行一些特定于Finder的限制文件。