0

我确信这是一个基本错误,但我找不到它。我有简单的代表,除此之外一切正常。我看不出与我通常处理事情的方式有什么不同。

@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?
  }
}
4

3 回答 3

1

您确定 -[SettingsViewController delegate] 的支持 iVar 是 _delegate 吗?你可能有一个@syntehsize 代表;这将导致 iVar 只是“代表”的行。在调用 setDelegate: 之后在调试器中尝试“p * settingsViewController”,并确保您没有您认为拥有的更多实例变量。

于 2012-09-14T03:11:02.567 回答
0

我修好了它。那花费的时间太长了。我已经吸取了教训。感谢 Jon 提醒我使用调试器!

    SettingsViewController *settingsViewController = [segue destinationViewController];        
    NSArray *childViewControllers = [NSArray arrayWithArray:[settingsViewController childViewControllers]];
    [[childViewControllers objectAtIndex:0] setDelegate:self];

它有效,但这是正确的方法吗?[segue destinationViewController] 是一个 UINavigationController。

于 2012-09-14T15:55:25.543 回答
0

最可能的原因[segue destinationViewController]nil。或者,您可能有一个setDelegate:未正确实现的自定义。

于 2012-09-14T03:10:07.610 回答