2011-01-14 1 views
0

NSNumberのメンバーが数人いる管理オブジェクトを私のiPhoneアプリで作成しました。これらの値を初期化します。サブオブジェクトメンバも作成します。次に、UNDOマネージャを作成して、サブオブジェクトに対してUNDO操作を実行できるようにします。UNDOは初期化されたパラメータに影響しません。しかし、私のアプリを起動して電話すると...なぜNSUndoManager canUndoはいですか?

[undoManager canUndo]; 

... "はい"です。どうすればいいの?トップレベルのデータメンバーはゼロにリセットされます。それだけでなく、sub-objetのmanagedObjectContextはnilです。 UNDOマネージャを作成する前に、サブオブジェクトが作成されているときはどうすればよいでしょうか。元に戻すマネージャはレトロアクティブですか? UNDOマネージャを作成する前にこれらのデータメンバーが設定されていても、管理対象オブジェクト全体の元に戻すことができます。

洞察が得意です。

+0

NSManagedObjectContextは独自の元に戻すマネージャを作成します。 disableUndoRegistrationとenableUndoRegistrationを使用して、特定のものが元に戻らないようにします。 – ughoavgfhw

+0

@ughoavgfhw:iOSプラットフォームでは正しくありません! – Felix

+0

iPhoneのCoreDataBooksの例に従っています。困惑していることは、canUndoがUNDOマネージャを作成した後にNOを返し、viewWillAppearメソッドでNOを返すことです(私はオブジェクトに影響を与える他のコードをコメントアウトしました)。しかし、取り消しボタンをタップすると、YESを返します。どうすればいいの? – Christopher

答えて

1

管理対象オブジェクトが保存されていない場合、NSUndoManagerの作成は既存のオブジェクトに適用され、オブジェクトの変更を元に戻すことができます。オブジェクトがさまざまな画面のオプションから作成されるため、ビューを表示する前に単にオブジェクトを保存するだけで、これがわかりました。オブジェクトを保存した後に取り消そうとすると、CanUndoは期待どおりにNOを返します。

ビューが表示された後、元に戻すマネージャでremoveAllActionsを呼び出すこともできますが、エントリポイントが多すぎるため問題があります。オブジェクトが保存されたので、ユーザーがキャンセルすると削除されます。

これは将来的に誰かを助けてくれることを願っています。

0

元に戻すマネージャでの変更の登録は延期されます。元に戻すマネージャーを設定するまで、変更が処理されていることを確認する必要があります。 processPendingChangesメソッドを使用できます。ここでは小さな例:

// create initial objects 
[managedObjectContext processPendingChanges]; 

// enable undo 
managedObjectContext.undoManager = undoManager;