2009-05-24原図とミキサーのモデルを作る初期化処理を追加する属性で初期化が必要なものがあるので、その処理を追加します。MasterMotifはMixerを所有し、MixerはOscillatorを所有するので、awakeFromInsertで所有するオブジェクトを生成する処理が必要です。awakeFromFetchでベジエパスを初期化するのですが、アンドゥの登録を無効にしていても、ある操作を実行するとベジエパスの初期化がアンドゥの対象となり、ドキュメントがダーティになってしまう事が判明しました。以前の対策は完璧ではなかったわけです。こんな事になるのかわかりませんが、一回何らかの操作を挟むとよさそうなので、対症療法でとりあえず対策します。osc3関連にセットする事です。よってMixerCDの初期化コードは以下の様になります。重要事項としてデベロッパドキュメントに載っていますが、サブクラスは自分の初期化コードを実行する前にスーパークラスのawakeFromInsertを呼び出さないといけません。これはawakeFromFetchでも同じです。createOscillator];}MasterMotifCDではMixerを生成します。初期化の最後でfullUpdateを実行します。Oscillatorの各bezierPath属性が初期化されます。fullUpdate];}awakeFromFetchの謎ファイルをオープンしただけでダーティになるで書いた様に、明示的にアンドゥの登録を禁止してベジエパスを初期化します。これでファイルをオープンしただけでダーティになる事は防げるのですが、ある操作をするとダーティになる事に気づきました。その操作とは「EditメニューもしくはHelpメニューを開いて、何もコマンドを実行せずに閉じる事」です。これで何らかの操作が登録されるらしく、ドキュメントがダーティになって、アンドゥメニューが有効になります。アンドゥを実行しても見た目では何も変わらず、何が実行されたのかわかりません。ところがOscillatorCDとMixerCDのawakeFromFetchをコメントアウトすると、アンドゥを実行した時にそれぞれの波形が消えます。CoreDataフレームワークの内部で一体何が起こっているのでしょうか?謎です。enableUndoRegistration];}対症療法でとりあえず何とかする「EditメニューもしくはHelpメニューを開いて、何もコマンドを実行せずに閉じる事」で謎のアンドゥが実行できてしまう現象は、パラメータを変更するなど、一度何らかの操作をアンドゥマネージャに登録すると発生しません。登録した操作以上には遡れないのです。そこで対症療法ですが、awakeFromFetchで一度ダミーの操作を実行し、それをアンドゥしてみる事にしました。undo];}これで謎のアンドゥはできなくなるのですが、リドゥメニューにダミー操作をリドゥする項目が現れてしまっています。そこでアンドゥマネージャに登録されているアクションをリセットします。removeAllActions];}これでようやく問題が解決しました。ところで、こうなってみるとアンドゥの登録を禁止、有効にしているコードはもう不要ですね。removeAllActions];}resolutionに同じ値を設定しているのだからアンドゥしなくても同じではないかと、アンドゥを実行している行も削除したところ、これはうまくいきませんでした。awakeFromFetchは謎です。