J'essaye de construire un délégué pour me permettre de transmettre des données d'un contrôleur de vue enfant au parent. J'ai regardé divers tutoriels/questions en ligne mais ma méthode de délégué n'est pas déclenchée. Pourriez-vous jeter un oeil à mon code ci-dessous et voir si quelque chose me manque?Pourquoi mon délégué personnalisé ne fonctionne-t-il pas?
TownListViewController.h
@protocol TownListViewControllerDelegate;
@interface TownListViewController : UITableViewController <NSFetchedResultsControllerDelegate> {
id <TownListViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id <TownListViewControllerDelegate> delegate;
@end
@protocol TownListViewControllerDelegate
@optional
- (void)didSelectTown:(Town *)town;
@end
TownListViewController.m
@implementation TownListViewController
@synthesize delegate;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[delegate didSelectTown:(Town *)[self.fetchedResultsController objectAtIndexPath:indexPath]];
[self.navigationController popViewControllerAnimated:YES];
}
@end
SearchViewController.h
@interface SearchViewController : UITableViewController <TownListViewControllerDelegate> {
...
}
SearchViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
TownListViewController * townViewController = [[TownListViewController alloc] initWithNibName:@"TownListViewController" bundle:nil];
townViewController.delegate = self;
[self.navigationController pushViewController:townViewController animated:YES];
}
- (void)didSelectTown:(Town *)town
{
NSLog(@"didSelectTown fired");
self.selectedTown = town;
}
Toute aide est très appréciée.
Votre mise en œuvre des délégués est correcte. Je vérifierais toujours si le délégué répondToSelector bien que vous déclariez la méthode de délégué comme facultative ainsi si votre objet n'implante pas vous obtiendrez un plantage. Votre problème pourrait être dans le didSelectRowAtIndexpath - est-il définitivement appelé? – Rog
Spot sur! La méthode que je pensais pousser le TownListViewController à la pile (didSelectRowAtIndexPath) n'était pas appelée à la place, elle était poussée par une autre méthode qui ne définissait pas le délégué. Sur une autre note, j'essaye d'ajouter le respondsToSelector, mais il se présente en disant "-respondsToSelector not found", des idées? –
'if ([self.delegate respondsToSelector: @selector (didSelectTown :)]) {[self.delegate didSelectTown: ville];}' – Rog