Pasando valores entre maestro y detalle en UISplitViewController usando guiones gráficos
He definido el protocolo en el archivo Customer.h que se muestra a continuación:
<code>@class Customer; @protocol CustomerDelegate <NSObject> -(void) didSelectCustomer:(Customer *) customer; @end @interface Customer : NSObject { } @property (nonatomic,copy) NSString *name; @property (nonatomic,copy) NSString *occupation; @end </code>
El MasterViewController (lado izquierdo) invoca el método didSelectCustomer como se muestra a continuación:
<code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Customer *selectedCustomer = [customers objectAtIndex:[indexPath row]]; [self.delegate didSelectCustomer:selectedCustomer]; } </code>
Ahora, necesito decirle al DetailViewController (lado derecho) que haga algo. DetailViewController cumple con el protocolo CustomerDelegate.
<code>@interface DetailViewController : UIViewController<UISplitViewControllerDelegate,CustomerDelegate> { } -(void) didSelectCustomer:(Customer *)customer { NSLog(@"sssdasdasdasd"); } </code>
El método didSelectCustomer nunca se invoca. Creo que necesito configurar el masterViewController.delegate = self pero no estoy seguro de dónde configurar esto.
ACTUALIZACIÓN 1:
Agregué la instancia de MasterViewController dentro de DetailViewController pero no funcionó:
<code>- (void)viewDidLoad { [super viewDidLoad]; MasterViewController *master = [[MasterViewController alloc] init]; master.delegate = self; } </code>
SOLUCIÓN:
En AppDelegate:
<code> else { UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController; splitViewController.delegate = [splitViewController.viewControllers lastObject]; UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; // splitViewController.delegate = (id)navigationController.topViewController; DetailViewController *detail =(DetailViewController *) [splitViewController.viewControllers lastObject]; UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0]; MasterViewController *master = (MasterViewController *)masterNavigationController.topViewController; master.delegate = detail; } </code>