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 はファイルに (読み書きで) アクセスする権利を与えてくれるので、これは合理的だと思われます。このファイルを削除すると、私に与えられた権利がなくなります。
私の推測は正しいですか?
どうすればこの問題を解決できますか?