Attention! Translated article might be found on my English blog.

2016年7月8日金曜日

NSDocumentで特定の拡張子を持つファイルをインポートして新規ドキュメントとして開く

気づきそうで気づいてなかったのでメモ。

手順としては
1: インポート扱いしたい拡張子をDocument Typeで宣言し、RoleをViewerにする。
2: 読み込み時(NSDocument readFrom〜系をオーバーライドして)fileURLをnilにセットする。
の2つが必要のようです。
参考: How do I create an import-only document type in Cocoa? - Stack Overflow

-- 2016/07/08 追記 --
上の方法だと、もし名称未設定のままアプリが強制終了した場合、
アプリ再起動後にデータが空のドキュメントを作ろうとしてしまい、
実装によってはドキュメントが作れず再度強制終了してしまいます。
(自分の実装ではそうなってしまいました)

具体的には、fileURLをnilにしてしまうと再起動時には
[NSDocumentController openUntitledDocumentAndDisplay:error:]を読んでるようで、
(例えばPreview.appのように)"ドキュメントが空"という状態を想定していない
作りになっているとうまくいかないようでした。

ひとまずfileURLはnilにせずそのままにして対処しようと思います。
-- 2016/07/08 追記終わり --