diff --git a/Source/GSStoryboardTransform.h b/Source/GSStoryboardTransform.h index 0d162782b..587047931 100644 --- a/Source/GSStoryboardTransform.h +++ b/Source/GSStoryboardTransform.h @@ -73,7 +73,7 @@ extern "C" { id _sender; NSString *_identifier; NSString *_kind; - NSDictionary *_identifierToSegueMap; + NSStoryboardSegue *_storyboardSegue; NSStoryboard *_storyboard; } @@ -95,12 +95,12 @@ extern "C" { - (NSString *) kind; - (void) setKind: (NSString *)kind; -- (NSDictionary *) identifierToSegueMap; -- (void) setIdentifierToSegueMap: (NSDictionary *)table; - - (NSStoryboard *) storyboard; - (void) setStoryboard: (NSStoryboard *)storyboard; +- (NSStoryboardSegue *) storyboardSegue; +- (void) setStoryboardSegue: (NSStoryboardSegue *)ss; + - (IBAction) doAction: (id)sender; @end diff --git a/Source/GSStoryboardTransform.m b/Source/GSStoryboardTransform.m index ff3115ee8..4648ad82a 100644 --- a/Source/GSStoryboardTransform.m +++ b/Source/GSStoryboardTransform.m @@ -143,16 +143,6 @@ ASSIGN(_kind, kind); } -- (NSDictionary *) identifierToSegueMap -{ - return _identifierToSegueMap; -} - -- (void) setIdentifierToSegueMap: (NSDictionary *)table -{ - ASSIGN(_identifierToSegueMap, table); -} - - (NSStoryboard *) storyboard { return _storyboard; @@ -163,6 +153,16 @@ ASSIGN(_storyboard, storyboard); } +- (NSStoryboardSegue *) storyboardSegue +{ + return _storyboardSegue; +} + +- (void) setStoryboardSegue: (NSStoryboardSegue *)ss +{ + ASSIGN(_storyboardSegue, ss); +} + - (id) nibInstantiate { return self; @@ -171,10 +171,10 @@ - (void) dealloc { RELEASE(_storyboard); - RELEASE(_identifierToSegueMap); RELEASE(_kind); RELEASE(_identifier); RELEASE(_sender); + RELEASE(_storyboardSegue); [super dealloc]; } @@ -187,22 +187,20 @@ } else // This is a special case where there is no source controller and we don't ask "should" { - NSMapTable *mapTable = [_identifierToSegueMap objectForKey: APPLICATION]; - NSStoryboardSegue *segue = [mapTable objectForKey: _identifier]; id destCon = nil; - if ([[segue destinationController] isKindOfClass: [NSViewController class]] || - [[segue destinationController] isKindOfClass: [NSWindowController class]]) + if ([[_storyboardSegue destinationController] isKindOfClass: [NSViewController class]] || + [[_storyboardSegue destinationController] isKindOfClass: [NSWindowController class]]) { - destCon = [segue destinationController]; + destCon = [_storyboardSegue destinationController]; } else { - NSString *destId = [segue destinationController]; + NSString *destId = [_storyboardSegue destinationController]; destCon = [_storyboard instantiateControllerWithIdentifier: destId]; } - [segue _setSourceController: nil]; - [segue _setDestinationController: destCon]; // replace with actual controller... - [segue perform]; + [_storyboardSegue _setSourceController: nil]; + [_storyboardSegue _setDestinationController: destCon]; // replace with actual controller... + [_storyboardSegue perform]; } } @@ -213,7 +211,7 @@ [pa setSelector: [self selector]]; [pa setSender: _sender]; [pa setIdentifier: _identifier]; - [pa setIdentifierToSegueMap: _identifierToSegueMap]; + [pa setStoryboardSegue: _storyboardSegue]; [pa setStoryboard: _storyboard]; return pa; } diff --git a/Source/NSStoryboard.m b/Source/NSStoryboard.m index 065cfd832..df86d6433 100644 --- a/Source/NSStoryboard.m +++ b/Source/NSStoryboard.m @@ -31,6 +31,7 @@ #import #import #import +#import #import "AppKit/NSApplication.h" #import "AppKit/NSNib.h" @@ -227,8 +228,11 @@ static NSStoryboard *__mainStoryboard = nil; if ([o isKindOfClass: [NSStoryboardSeguePerformAction class]]) { NSStoryboardSeguePerformAction *ssa = (NSStoryboardSeguePerformAction *)o; + NSMapTable *mapTable = [[_transform identifierToSegueMap] objectForKey: identifier]; + NSStoryboardSegue *ss = [mapTable objectForKey: [ssa identifier]]; + [ssa setSender: result]; // resolve controller here... - [ssa setIdentifierToSegueMap: [_transform identifierToSegueMap]]; + [ssa setStoryboardSegue: ss]; [ssa setStoryboard: self]; if ([[ssa kind] isEqualToString: @"relationship"]) // if it is a relationship, perform immediately { @@ -262,7 +266,8 @@ static NSStoryboard *__mainStoryboard = nil; } else { - NSLog(@"Couldn't load controller scene identifier = %@", identifier); + [NSException raise: NSInternalInconsistencyException + format: @"Couldn't load controller scene identifier = %@", identifier]; } // Execute the block if it's set...