最近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をやろうとするとあれ?へん??ってなるんですが、実際損な風に使うことって滅多にないんですよね