元に戻す操作で問題が発生しています。次のコードは操作を元に戻せませんremoveObjectForKey:
が、やり直し操作setObject:ForKey:
は機能します。
- (void) insertIntoDictionary:(NSBezierPath *)thePath
{
[[[window undoManager] prepareWithInvocationTarget:self] removeFromDictionary:thePath];
if(![[window undoManager] isUndoing])
[[window undoManager] setActionName:@"Save Path"];
NSLog(@"Object id is: %d and Key id is: %d", [currentPath objectAtIndex:0], thePath);
[colorsForPaths setObject:[currentPath objectAtIndex:0] forKey:thePath];
}
- (void) removeFromDictionary:(NSBezierPath *)thePath
{
[[[window undoManager] prepareWithInvocationTarget:self] insertIntoDictionary:thePath];
if(![[window undoManager] isUndoing])
[[window undoManager] setActionName:@"Delete Path"];
NSLog(@"Object id is: %d and Key id is: %d", [colorsForPaths objectForKey:thePath], thePath);
[colorsForPaths removeObjectForKey:thePath];
}
コンソールの出力は次のようになります。
// Before setObject:ForKey:
Object id is: 1183296 and Key id is: 1423872
// Before removeObjectForKey:
UNDO
Object id is: 0 and Key id is: 1423872
キー ID は同じままですが、オブジェクト ID が異なる理由がわかりません。オブジェクトの特別な取り消し/やり直し処理はありNSMutableDictionary
ますか?
thx ソニック