0

rootController.viewのサブビューとして追加されたlabel.textに文字列を渡したいのですが:

@implementation MainViewController //the rootController

@synthesize leftLabel;

- (void)viewDidLoad {
   [super viewDidLoad];

   leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(100.0, 558.0, 250.0, 30.0)];
   leftLabel.font = [UIFont systemFontOfSize:20.0];
   leftLabel.textAlignment = UITextAlignmentCenter;
   leftLabel.textColor = [UIColor whiteColor];
   leftLabel.backgroundColor = [UIColor clearColor];
   leftLabel.text = @"Some text";
   [self.view addSubview:leftLabel];
}

- (void)updateLabel:(NSString *)aText {
   leftLabel.text = aText;
}

メッセージは別のViewControllerで送信されます...

NSArray *viewControllers = [self.navigationController viewControllers];
MainViewController *textTarget = (MainViewController *)[viewControllers objectAtIndex:0];
[textTarget updateLabel:@"Hello"];

ただし、rootControllerに到達することはなく、メソッドは呼び出されません。他のViewControllerは、すべて到着する他のメッセージを送信します。しかし、rootControllerを対象としたものではありません。なぜそれが機能しないのか考えてみてください。

4

1 に答える 1

1

メッセージの送信時にVCがナビゲーションコントローラーにプッシュされていない場合は、self.navigationControllernilを返し、他のすべてのメソッドはnilを返し、すべての呼び出しを無効にします。

于 2012-09-08T14:45:18.307 に答える