У меня есть метод с именем dateSelectViewController, объявленный в моем файле .h как протокол:
@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");
}
По какой-то причине это работает вообще Когда кнопка «Готово» нажата в моем классе делегаторов, кнопка делает то, что должна, и выталкивает представление контроллер, но это похоже на то, что сообщение никогда не отправляется делегату. Сначала я подумал, что могу отправить сообщение nil, но оно имеет идентификатор типа, так что этого не должно быть. Почему сообщение не отправляется?