我正在疯狂地对待我确信是一个基本错误,但我找不到它。我有简单的代表,一切都有效,除了这一个。我看不出我通常处理事情的方式有什么不同。
@interface MasterViewController () <DetailViewControllerDelegate, SettingsViewControllerDelegate>
@end
@implementation MasterViewController
....
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"ShowSettings"]) {
// here settingsViewController._delegate is 0x075...
// why? where is this coming from?
SettingsViewController *settingsViewController = [segue destinationViewController];
// here settingsViewController._delegate is 0x00000 which I would expect
[settingsViewController setDelegate:self];
// here settingsViewController._delegate is still 0x0000 -- why?
}
}
答案 0 :(得分:1)
你确定 - [SettingsViewController委托]的支持iVar是_delegate吗?你可能有一个@syntehsize委托;这条线会导致iVar成为'委托'。调用setDelegate后,在调试器中尝试“p * settingsViewController”,并确保没有更多的实例变量。
答案 1 :(得分:0)
最可能的原因是[segue destinationViewController]
是nil
。或者,您可能有一个未正确实现的自定义setDelegate:
。
答案 2 :(得分:0)
我修好了。这花了太长时间。我已经吸取了教训。感谢Jon提醒我使用调试器!
SettingsViewController *settingsViewController = [segue destinationViewController];
NSArray *childViewControllers = [NSArray arrayWithArray:[settingsViewController childViewControllers]];
[[childViewControllers objectAtIndex:0] setDelegate:self];
它有效,但这是正确的方法吗? [segue destinationViewController]是一个UINavigationController。