2011-12-26 9 views
0

Xcode 3で始まったMacOSのコアデータプロジェクトは、Xcode 4でうまく動作しません。特に、元に戻す/やり直しの管理があります。
Xcode 4から新しいCore Dataプロジェクトを開始しましたが、取り消しに関する問題に直面しています。UndoRedoのメニュー項目は、Xcode 3で作成されたプロジェクトの場合のように、First ResponderのUndo:\Redo:メソッドにリンクされています。メニューは常に無効になっていました。
メニュー項目のEnabledプロパティからのバインドをmanagedObjectContext.undoManager.canUndo/canRedoにしました。これにより、ユーザーがオブジェクトを変更したときにメニューが有効になりますが、とにかく元に戻す操作は効果がありませんでした。メニューは有効なままですが、 。アンドゥを得るための唯一の方法は、まずレスポンダへのメニュー項目の接続を切断し、代わりにAppDelegateの新しいIBActionsに別のものを作ることだった
:このようにXcode 4のコアデータと元に戻すアクション

- (IBAction)myUndoAction:(id)sender 
{ 
    [[[self managedObjectContext] undoManager] undo]; 
} 

- (IBAction)myRedoAction:(id)sender 
{ 
    [[[self managedObjectContext] undoManager] undo]; 
} 

(およびEnable性質を持ちますcanUndocanRedoにバインドされている場合)、両方のメニュー項目がCore Dataオブジェクトに対して期待通りに機能します。とにかく、Xcode 3でこの問題が発生したことはありません。

誰かがXcode 4でこの問題に直面していますか?古いテンプレートの問題を避けるため、Xcode 4.2.1を一から再インストールしましたが、同じ問題が再発しました。
私はXcode 3もインストールするのは好きではありません。機能しているプロジェクトから始めて、プロジェクトをXcode 4に移行するだけです!
私は知っているすべてのフォーラム、Appleの議論でグーグルで調べましたが、何も見つかりませんでした。私は10.7.2です。アクションはファーストレスポンダにリンクされたままでなければならないので、アンドゥ/リドゥは常に、ManagedObjectContextからNSUndoManagerを呼び出すようAppDelegateにアンドゥ/リドゥをリンクして


UPDATE
は、他の操作を中断します。
コアデータプロジェクトを最初から生成してから、Xcode 4からオープンする必要があります(テンプレートのどこにバグがあるのか​​分かりません...)

答えて

2

私は、自分のウィンドウコントローラーにNSWindowDelegateプロトコルを実装させ、windowWillReturnUndoManager:アプリケーションのデリゲートへの呼び出しを中継させることで、この問題を回避することができました。

+2

タイラーありがとう、これが解決!私はちょうどXCode 4のCoreDataテンプレートがAppDelegateに設定されていないメインウィンドウのデリゲートを持っていることに気付きました。これはおそらくwindowWillReturnUndoManagerが呼び出されなかった理由でした。 –

+0

@ max.me私は同じ問題があったし、私のウィンドウのデリゲートをInterface BuilderのNIBファイルの "App Delegate"に設定した後に動作します。しかし、今私はまた、ここで何が起こっているのか理解したかった:誰も説明することができますか? – MartinW

関連する問題