FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


macOSでwindowを閉じる時に「保存しないの?」って聞いて欲しい

masOSのDocument-Based ApplicationでwindowをメニューのCloseや⌘+wで閉じる時に保存してない場合、 「保存してないけどええのん?」って聞いてくれる例のあれを実装するのに苦労した話。

そもそもNSDocumentオブジェクトはどうやって保存すべき内容に変更があるかどうか知るんだ?というのも疑問だよな。調べるとNSUndoManagerを使ってundo/redoを実装するなら特に気にせんでいい、実装しないなら
updateChangeCount:
メソッドを実装すりゃええ、ということらしい。

ところがどちらにせよ、いくら頑張っても「保存してないけどええんか?ホンマにええんか?」と聞いてくれない。NSDocumentのdocumentEdited(ダーティフラグっていうのかな?)を見るとちゃんと立ってるはずなんだが、、、?いけずな奴だ。

で、ようやく気付いたんだが、、、
XcodeでDoc-Based Appを新規作成した場合デフォでDocument(NSDocumentのサブクラス)が作成されて、その中に
+(BOOL)autosavesInPlace
ってクラスメソッドがある。デフォでYESを返してるところをNOにしてやると

保存するか聞く画面

↑ちゃんと聞いてくれた!ああ、そういうことかよ、、、orz


なお、NSUndoManagerを使う時、
undoManager = document.undoManager;
のようにNSDocumentオブジェクトからもらいましょう。自分で
undoManager = [UndoManager new];
このように自作してて地味にはまってました。


↓参考サイト、多謝!
NSUndoManagerを使って簡単にアンドゥ、リドゥを実装する

<< Blenderで文字(日本語)のオブジェクトを扱いたい  TopPage  macOSでテーブル処理をViewController以外に記述したい >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1103-c7aa808b




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad