Undo / Redo | TokoTokoSoftware

TokoTokoSoftware

iPhone / iPadアプリを作っている団体「トコトコ」です
大学生二人でMacBookつかって頑張ってます!!

最近CoreDataにはまって、CoreData Loveになりそうですヾ(@°▽°@)ノ

CoreDataってただのデータ保存用の関数とかがあるだけって思ったら
どちらかと言えばモデル作成キットみたいな感じなんですね!

CoreDataとSQLiteを比べていた昔が懐かしい・・・・
そもそも方向性が違ったなんて考えてもいませんでしたよ




で、最近CoreDataのUndo / Redo を実装してるんですが、
ちょっと使い方をミスったのでここで紹介しときます

自分はUndo/Redoのテストとして、ボタンをクリックしたらUndoするとかの方式ではなくて
NSLogをつかってテストしてたんですね。

すると、Undoをするとなぜか最初の状態に戻っちゃうんです・・・
1、2、3って値を入れてUndoすると2になってほしいのに1になっちゃうんです
Redoすると3になって「あれ?2は????」ってなったんですね

で、しばらく(3日ぐらい)悩んだ結果わかったのが、自動グループ機能の効果でこうなってることがわかりました

なんと、UndoManagerには自動グループ機能があって、それにより
「2、3を入れるので一つの動作」
と覚えたらしいんですよ
それでUndoすると「ひとつもとに戻す」=「2、3を入れる前の状態にする」ってことで
1になっちゃったんですね


こんな機能いらない!!って思ったんですけど、
グループ機能をよく知るとかなり便利だったりするんですよ

グループ化されるのは1ループごと(システムに制御が戻るまで)らしいので、
一気に3つデータを変えるとかやったときに、それをグループ化して勝手に一つの動作って覚えてくれるんです

今回のNSLogでのテストみたいに、システムに制御が戻る前にUndo/Redoをやろうとするとあれ?へん??ってなるんですが、実際損な風に使うことって滅多にないんですよね