Я создаю NSSavePanel
, используя этот код:
NSSavePanel *savePanel = [NSSavePanel savePanel];
savePanel.delegate = self;
savePanel.directoryURL = ...;
savePanel.nameFieldStringValue = ...;
[savePanel beginSheetModalForWindow:self.window
completionHandler:^(NSInteger returnCode) {
if (returnCode == NSFileHandlingPanelOKButton) {
// the completion handler
}
}];
Если на панели сохранения пользователь выбирает уже существующий файл, появляется окно с предупреждением «« XXX »уже существует. Вы хотите заменить его?».
Если пользователь нажимает кнопку «Заменить», в обработчике завершения старый файл удаляется методом removeItemAtPath:error:
, равным NSFileManager
, и затем создается новый файл (на самом деле: он создается во временном режиме). местоположение, а затем перемещается с использованием moveItemAtPath:toPath:error:
метода, но я думаю, что это просто деталь реализации):
if (returnCode == NSFileHandlingPanelOKButton) {
// overwrite the url, because if we are here is because the user has already
// expressed its willingness to overwrite the previous file
NSError *error = nil;
BOOL res = [[NSFileManager defaultManager] removeItemAtURL:savePanel.URL error:&error];
if (res) {
res = [[NSFileManager defaultManager] moveItemAtPath:tmpFilePath toPath:savePanel.URL error:&error];
}
// ...
}
В прошлом все всегда работало должным образом. Однако сегодня я начал использовать Lion's Sandbox с правом «Чтение / запись».
В песочнице removeItemAtPath:error:
успешен, но следующий moveItemAtPath:toPath:error:
возвращает ошибку.
Это кажется разумным, потому что Powerbox дает мне права доступа (при чтении и записи) к файлу. Когда я удаляю этот файл, предоставленное мне право исчерпывается.
Правильно ли мое предположение?
Как я могу решить эту проблему?