Hi. If anybody reads the help-gnustep mailing list or GNUstep's bug-tracker then you'll know of an NSUndoManager and NSInvocation issue. To sum it up:
- the current implementation of NSUndoManager has the following bug: the invocations it stores when doing invocation-based undo don't -retainArguments - which results in crashes when the user does undo, since the arguments might have been long deallocated. (If you want to test it, try the DataBuilder application from http://gscoredata.nongnu.org) - when trying to fix it by doing -[NSInvocation retainArguments] in -[NSUndoManager fowardInvocation:] another problem results: since the invocation retains it's arguments and _target_ this creates a retain loop, as the usual target of undo operations is an NSDocument, the owner of the NSUndoManager. Together with Quentin we've investigated the issue and checked behavior with Cocoa. Apple circumvented this by creating a custom subclass named _NSUndoInvocation which does retain it's arguments, but not it's target. I've fixed this by creating a method in NSInvocation called -retainArgumentsIncludingTarget: where the sender of the message can explicitly define whether to retain the target or not, and made NSUndoManager use it. A tarball with the three fixed files (NSInvocation.[hm] and NSUndoManager.m) is available at http://openspace.adlerka.sk/NSUndoManagerFix.tar.gz . -- Saso _______________________________________________ Bug-gnustep mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-gnustep
