具体的には初回のみ成功して、2回目以降はNG(Finder側に移動不可マークが出る)。ムービープレビューをやり直しても、Flashを再起動してもダメで、OSを再起動しないとうまくいかない(それでもOS再起動後1回のみで、あとはNG)。
具体的なファイル保存の方法は・・・
1.一時ディレクトリを作成(File.createTempDirectory())
2.一時ディレクトリに保存ファイルを作成(File.resolvePath())
3.FileStreamで保存ファイルにBitmapDataを書き込み(FileStream.writeBytes())
とファイルを作っておいて、ファイルをドラッグ開始したときに
1.クリップボードに保存ファイルをセット(Clipboard.setData())
2.ドラッグ処理を設定(NativeDragManager.doDrag())
して、ドラッグ完了時に・・・
1.クリップボードの保存ファイルが、ドロップした場所に移動する
(NativeDragActions.MOVE/自動で行われる)
2.一時ディレクトリを削除する(File.deleteDirectory(true))
という手順になっています。
いろいろ調べてみると、どうも一時ディレクトリで引っかかっているようで、一時ディレクトリの削除をはずすと問題なく動作する。削除自体はエラーにならないけど、ちゃんと解放されていないとか、そんな感じなのかな?
ただ一時ファイルは削除しないと新規に作られ続けるので、明示的にディレクトリを作って、それを削除する方法に変更した。具体的には・・・
1.File.desktopDirectoryとFile.resolvePath()を使って、明示的なディレクトリを作成
(File.createDirectory())
2. 明示的なディレクトリを削除する(File.deleteDirectory(true))
という感じに変更しました。
テスト環境はMacOSX10.5.8+Flash CS4です。サンプルファイルのAIRでも同様でした。但し知人にWindows Vista+Flash CS3で試してもらったところ、問題なく動作したらしい。OSXの問題なのか、AIR1.5なのか、CS4なのか…。特定できませんでしたが、とりあえず対処できたので良しとします。
書籍のサンプルファイルは
サポートページからダウンロードできるので、気になる方は試してみて下さい。もし何かわかったら教えて下さい。