beginSheetModalForWindowからURLを取得します:
-
24-09-2019 - |
質問
私は、ファイルパスのURLを取得するためにOpenPanelを使用しています。この作品ます:
[oPanel beginSheetModalForWindow:theWindow completionHandler:^(NSInteger returnCode)
{
NSURL *pathToFile = nil;
if (returnCode == NSOKButton)
pathToFile = [[oPanel URLs] objectAtIndex:0];
}];
これしない、エラー「読み取り専用変数の割り当て」をもたらす:
NSURL *pathToFile = nil;
[oPanel beginSheetModalForWindow:theWindow completionHandler:^(NSInteger returnCode)
{
if (returnCode == NSOKButton)
pathToFile = [[oPanel URLs] objectAtIndex:0];
}];
return pathToFile;
は一般的に、oPanelのコンテキストからpathToFileを抽出する任意の試みは失敗しました。これは、小規模な状況のため、このような大したことではありませんが、私のコードが大きくなるにつれて、私はスタッフすべてに強制しています - XML解析、コアデータなど - 不適切な領域の内側。私はpathToFileを抽出するために何ができるでしょうか。
感謝します。
解決
これしない、エラー「読み取り専用変数の割り当て」をもたらす:
NSURL *pathToFile = nil; [oPanel beginSheetModalForWindow:theWindow completionHandler:^(NSInteger returnCode) { if (returnCode == NSOKButton) pathToFile = [[oPanel URLs] objectAtIndex:0]; }]; return pathToFile;
はい、あなたはブロックが作成されたときに行われますpathToFile
変数のコピーに割り当てるしようとしているので。あなたがブロックの外側で宣言した元pathToFile
変数に代入していない。
だから、あなたは、ローカル変数へのあなたの完了ハンドラブロックを割り当てていますが、おそらく時間ブロックの実行によって返されていますローカル変数を宣言するあなたの方法を持ってしようとしています値との仕事は、ブロックが<デル>左デル>変数に残すこと。
どのようなあなたがpathToFile
を行うブロックが呼び出すことができること(NSURL *
引数を取る)ブロック自体で、または方法のいずれかである必要があります。
他のヒント
あなたはちょうどあなたが後でシートを終わらせるようにする必要があり、シートを開始した後、
あなたがすることもできrunModal。この方法は、あなたがそれは廃止されていない、Appleの意志を曲げる必要はありませんし、それはまだ完璧に動作するはずです。
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel beginSheetModalForWindow:window completionHandler:nil];
NSInteger result = [openPanel runModal];
NSURL *url = nil;
if (result == NSFileHandlingPanelOKButton)
{
url = [openPanel URL];
}
[NSApp endSheet:openPanel];
これは少しコーディング黒魔術のように思えるが、それは作業を行います。
所属していません StackOverflow