2012-04-09 13 views
1

Ich habe eine Universal-App mit UISplitViewConroller. Ich verwende Storyboards.Delegierter nicht in iOS5 gesetzt StoryBoard UISplitViewController

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
{ 
     UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 
     UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0]; 
     LeftViewContrller *lcontroller = (LeftViewContrller *)masterNavigationController.topViewController; 
     id<SplitViewDelegate> rightController = (id<SplitViewDelegate>)[splitViewController.viewControllers objectAtIndex:1]; 
     lcontroller.delegate = rightController; 
} 

Ich habe einen linken und rechten Controller für UISplitViewController App.

LeftViewController verfügt über einen benutzerdefinierten Delegaten, der als RightViewController festgelegt ist.

//Custom delegate 

@protocol SplitViewDelegate <NSObject> 

- (void) matchSelectionChanged:(NSString *)curSelection; 

@end 

//LeftViewContoller 

@interface LeftViewContrller : UITableViewController { 
    id<SplitViewDelegate> _delegate; 
    NSMutableArray *_matches; 
} 
@property (strong) id<SplitViewDelegate> delegate; 
@property (strong) NSMutableArray *matches; 

@end 

RightViewController implementiert dieses Delegate-Protokoll. Wenn jedoch in LeftViewController auf die Zelle innerhalb der Zeile geklickt wird, schlagen die Delegierten fehl.

//RightViewController 
@interface RightViewController : UIViewController <SplitViewDelegate> 

@property (weak,nonatomic) IBOutlet UILabel *matchLabel; 

@end 

//Implementation of RightViewController 
- (void) matchSelectionChanged:(NSString *)curSelection { 
    self.matchLabel.text = curSelection; 
    //[self refresh]; 
} 

//Did select row in LeftViewController 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSMutableString *s = [[NSMutableString alloc] initWithString:@"Row selected"]; 
    if (_delegate != nil) { 
     [s appendFormat:@" %d ", indexPath.row]; 
     [_delegate matchSelectionChanged:s]; 
    } 
} 

// Get Fehler CustomViewTab [1200: 11303] * Beenden app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: '- [UINavigationController matchSelectionChanged:]: Unbekannter Selektor an Instanz gesendet 0xda6a770' * erster Wurf Call-Stack: (0x1559052 0x1da8d0a 0x155aced 0x14bff00 0x14bfce2 0x1204e 0x62071d 0x620952 0x25986d 0x152d966 0x152d407 0x14907c0 0x148fdb4 0x148fccb 0x2500879 0x250093e 0x590a9b 0x1df8 0x1d55) terminate genannt, eine Ausnahme zu werfen

ich didSel sehen ectRowAtIndex aufgerufen aber dann RightViewController MatchSelectionChanged: (NSString *) curSelection wird nie aufgerufen.

Antwort

0

Etwas von einer alten Frage, aber ich stolperte darüber und auf einen Blick hast du den richtigen Delegierten?

@interface RightViewController : UIViewController <UISplitViewControllerDelegate> 

Ich bin auf der Suche iOS7 so vielleicht seine seit iOS5 geändert