NSDocument和NSFileWrapping保存坏名称

时间:2013-08-07 14:53:27

标签: objective-c cocoa nsdocument nsfilewrapper

我的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;

1 个答案:

答案 0 :(得分:0)

我发现在调用fileWrapperOfType_error时保留initDirectoryWithFileWrappers的文件包装器导致了问题。我现在每次使用initWithURL_options_error或initDirectoryWithFileWrappers保存文档时初始化NSFileWrapper的新实例。

但是,我仍然无法修改Finder中的文档包内容,即使我对目录0777进行了修改。可能会对这些内容进行一些特定于Finder的限制文件。