I am doing a simple tutorial on NSNotification and facing some problems in executing it properly. When I click the button on the First View, the text field in the second view does not get update. When i debug by placing a NSLog in the receiveNotification, no response. Not sure why the receiveNotification is not being called.
The code looks like this:
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController{
}
-(IBAction)one:(id)sender;
-(IBAction)two:(id)sender;
-(IBAction)secondview:(id)sender;
@end
ViewController.m
#import "ViewController.h"
#import "SecondViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(IBAction)one:(id)sender{
[[NSNotificationCenter defaultCenter] postNotificationName:@"Test1" object:self];
NSLog(@"Hello");
}
-(IBAction)two:(id)sender{
[[NSNotificationCenter defaultCenter] postNotificationName:@"Test2" object:self];
NSLog(@"Hello");
}
-(IBAction)secondview:(id)sender{
SecondViewController *secondview = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self presentViewController:secondview animated:YES completion:nil];
}
@end
SecondViewController.h
#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController{
IBOutlet UITextField *counterOneText;
IBOutlet UITextField *counterTwoText;
int counterOne;
int counterTwo;
}
-(IBAction)back:(id)sender;
@end
SecondViewController.m
#import "SecondViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
counterOne = 0;
counterTwo = 0;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification) name:@"Test1" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification) name:@"Test2" object:nil];
}
return self;
}
-(void)receiveNotification:(NSNotification *)notification{
if([[notification name] isEqualToString:@"Test1"]) {
counterOne++;
counterOneText.text = [NSString stringWithFormat:@"%d",counterOne];
NSLog(@"%@",counterOneText.text);
NSLog(@"Hello");
}else
{
counterTwo++;
counterTwoText.text = [NSString stringWithFormat:@"%d",counterTwo];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(IBAction)back:(id)sender{
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
Need some guidance on this..
receiveNotificationis not getting called because yourSecondViewControllerwas never instantiated. It cannot possible be called when the object doesn’t exist. If you pressedsecondView,back, then clickoneortwo, then the receiveNotification will trigger.EDIT:
I copied and pasted your code to test it out and I got most of what you want it to do. You will still have to press
secondviewfirst, thenback.In ViewController.m
In SecondViewController.h
In SecondViewController.m
@interface SecondViewController ()
@end