私は、子ビューコントローラから親にデータを渡すための代理人を構築しようとしています。私はオンラインで様々なチュートリアル/質問を見てきましたが、私のデリゲートメソッドは起動されていません。カスタムデリゲートが機能しないのはなぜですか?
私のコードを以下に見て、私が何かが欠けているかどうか確認できますか?
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;
}
ご協力いただきありがとうございます。
あなたのデリゲートの実装が正しいです。私はいつもデリゲートがrespondsToSelectorかどうかをチェックしますが、デリゲートメソッドをオプションとして宣言しているので、オブジェクトが実装されていないとクラッシュするでしょう。問題はdidSelectRowAtIndexpathにある可能性があります - 間違いなく呼び出されていますか? – Rog
スポットがあります!私が思ったメソッドは、(didSelectRowAtIndexPath)スタックにTownListViewControllerをプッシュする代わりに、デリゲートを設定していなかった別のメソッドによってプッシュされていました。別のノートでは、respondsToSelectorを追加しようとしていますが、 "-respondsToSelector not found"というアイデアは何ですか? –
'(self.delegate respondsToSelector:@selector(didSelectTown :)){{self.delegate didSelectTown:town;}' – Rog