Мой подкласс 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;