2013-08-07 3 views
0

Мой подкласс NSDocument с использованием типа документа пакета, который использует fileWrapperOfType: error: для записи данных на диск. Это работает отлично, но в итоге он начнет сохранять файлы с искаженными именами, например «2_ # $! @%! # _info.plist» вместо того, чтобы переписать соответствующий файл.NSDocument и NSFileWrapping, сохраняющие плохие имена

Я не знаю, какие изменения вызывают проблемы, но я думаю, что это разрешения, связанные с тем, что Finder не позволяет писать внутри пакета, даже если «stat» возвращает «drwxr-xr-x», который можно записать владельцем ,

Был ли 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

Я обнаружил, что сохранение файла оболочки из initDirectoryWithFileWrappers через вызовы к fileWrapperOfType_error вызывает проблемы. Теперь я инициализирую новый экземпляр NSFileWrapper каждый раз, когда документ сохраняется с помощью initWithURL_options_error или initDirectoryWithFileWrappers.

Однако проблема в том, что я не могу изменить содержимое пакета документов в Finder, даже если я chmod'd в каталоге 0777. Может быть, какое-то ограничение, зависящее от Finder, помещается в эти файлы.