Update UILabel in SubViewController from MainViewController

Posted on

Even though you are able to let your MainViewController directly call a method such as updateLabel defined in SubViewController, the view of the SubViewController will not be updated then. Even if you call setNeedsDisplay or force to be on the main thread. It all. won’t. help.

The only thing that helped me was implementing a NSNotificationCenter postNotification called by MainViewController and observed by SubViewController.

Example:

// MainViewController.m
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  
  [[NSNotificationCenter defaultCenter] postNotificationName:@"profileLoaded" object:userName];
}

// SubViewController.m
- (void)viewDidLoad {
  
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setUserName:) name:@"profileLoaded" object:nil];
}

- (void) setUserName:(NSNotification *)note {
  [_userNameLabel setText: note.object];
}

- (void) dealloc {
  [[NSNotificationCenter defaultCenter] removeObserver:self];
}

An alternative is using delegates. (But I didn’t want to go that road.)

Leave a Reply

Your email address will not be published. Required fields are marked *