.h ファイルでプロトコルとして宣言された dateSelectViewController というメソッドがあります。
@class DateSelectViewController;
@protocol DateSelectViewControllerDelegate
- (void)dateSelectViewController:(DateSelectViewController *)sender
theDate:(id)stringDate;
@end
プロトコルの下で、デリゲートを宣言しています。
@property (nonatomic, weak) id <DateSelectViewControllerDelegate> delegate;
実装ファイルでは、デリゲートを合成し、ビューで完了ボタンが押されたときにメッセージをデリゲートに送信します。
- (IBAction)DonePressed:(id)sender {
NSDate *chosen = [datePicker date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yyyy"];
NSString *formatedDate = [formatter stringFromDate:chosen];
//sending a message to the delegate
[self.delegate dateSelectViewController:self theDate:formatedDate];
[self.navigationController popViewControllerAnimated:YES];
}
委任されている .h ファイルで、委任者の .h ファイルをインポートしています。.m ファイルでは、プロトコルに準拠しています。
@interface MakePlantTVC ()<DateSelectViewControllerDelegate>
- (void)dateSelectViewController:(DateSelectViewController *)sender
theDate:(id)stringDate
{
self.displayDate.text = stringDate;
NSLog(@"delegate working");
}
何らかの理由で、これはまったく機能しています。私の委任者クラスで完了ボタンが押されると、ボタンは想定どおりに動作し、View Controller をポップしますが、メッセージが委任者に送信されないようです。最初は、メッセージを nil に送信できると思っていましたが、そのタイプは id であったため、そうではありません。メッセージが送信されないのはなぜですか?