デフォルトの [名前を付けて保存] ダイアログ シートからファイルの URL を取得するにはどうすればよいですか? Xcode で Snow Leopard 10.6 SDK を使用してドキュメントベースのアプリケーションを使用しています。
インターネットと Apple のドキュメントを 2 日間探し回った結果、[名前を付けて保存] ダイアログ シートの固有のインスタンスを使用する回答しか見つかりませんでした。誰もが独自の [ファイル] -> [保存] 機能を作成して車輪を再発明したいと考えているようですが、それは私がやろうとしていることではありません。私はすでにそれを行っています!
たとえば、私はこのアプローチを使用したくありません。デフォルト-(void)saveDocumentAs:sender
をNSDocument
次のように置き換えたくありません。
- (IBAction)saveFileAs:(id)sender
{
NSSavePanel *spanel = [NSSavePanel savePanel];
[spanel setCanCreateDirectories:YES];
[spanel setCanSelectHiddenExtension:YES];
[spanel setAllowedFileTypes:[[self currentDocument] writableTypesForSaveOperation:NSSaveAsOperation]];
[spanel setTreatsFilePackagesAsDirectories:YES];
[spanel beginSheetModalForWindow: [[[[self currentDocument] windowControllers] objectAtIndex:0] window] completionHandler:^(NSInteger result)
{
if (result == NSFileHandlingPanelOKButton)
{
NSString *type = [[self currentDocument] fileTypeFromLastRunSavePanel];
NSLog(@"%@", type);
NSURL *saveURL = [spanel URL];
NSLog(@"%@", saveURL);
[[self currentDocument] dataOfType:type error:nil];
}
}];
}
NSSavePanel
むしろ、ユーザーがデフォルトシートからファイル用に選択したファイル URL だけが必要です。このテストからわかるfileTypeFromLastRunSavePanel
ように、 はブロック内では機能しないため、ファイル URL ではなくデフォルトの保存パネルでファイル タイプを取得するか、ファイルではなくカスタム保存パネルからファイル URL を取得します。型くずれもありませんfileTypeFromLastRunSavePanel
。
- ユーザーがファイルを開く
- ユーザーがファイルを変更する
- ユーザーが「名前を付けて保存...」
- ユーザーはファイルの新しい名前を入力し、[保存] を押します
- ファイルの新しい名前が必要です。savePanel の独自のインスタンスを作成せずに取得するにはどうすればよいですか?
編集: [self fileURL]
NSDocument サブクラス内で試しました
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
メソッドですが、ドキュメントが既にディスクに保存されていない限り、null を返します。
編集 2: ここで私が求めていることを具体的に明確にするために、NSSavePanel の savePanel の独自のインスタンスではなく、デフォルトの NSSavePanel savePanel からユーザーが選択した URL を取得するにはどうすればよいですか? NSSavePanel のサブクラスを作成してそのメソッドをオーバーライドせずにこれを行うことはできますか? 独自の NSSavePanel インスタンスにその機能を追加しなくても、デフォルトの savePanel でユーザーが選択したファイルへのある種の URL 参照が与えられるのは理にかなっていると思いました。