【发布时间】:2012-05-06 03:29:48
【问题描述】:
我有一个名为 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 发送消息,但它的类型为 id,所以情况不应该如此。为什么没有发送消息?
【问题讨论】:
-
尝试在向代表发送消息之前添加
NSLog(@"delegate = %@", self.delegate)。 -
你设置了代理吗?
-
在将消息传递给委托人时,使用此条件检查委托人的可用性总是很好的
if (self.delegate && [self.delegate respondsToSelector:@selector(method_name)]) { [self.delegate method_name]} -
@zrxq 我尝试了您的建议,并在向代表发送消息之前和之后添加了 NSLog,在这两种情况下我都收到 null。我不需要分配类型 ID,是吗?
-
你会的。
id是一个指向对象的指针。
标签: objective-c ios delegates protocols