noobsmcgoobs
noobsmcgoobs

Reputation: 2746

NSNotification postNotification and addObserver

I am trying to do a notification from a location manager object to my viewController. It's not working - the selector in the addObserver method doesn't get called.

Location Manager Object.m files (singleton with standard dispatch once & init methods)

- (void)setCurrentLocation:(CLLocation *)currentLocation
{
    if (!_location) {
        _location = [[CLLocation alloc] init];
    }
    _location = currentLocation;
    NSNumber *latitude = [NSNumber numberWithDouble:self.location.coordinate.latitude];
    NSNumber *longitude = [NSNumber numberWithDouble:self.location.coordinate.longitude];

    NSLog(@"lat %@ & long %@ in notification section", latitude, longitude);

    NSNotification *notification = [NSNotification notificationWithName:@"myNotification" object:self userInfo:              @{kSetLat: latitude,
        kSetLong: longitude}];


    [[NSNotificationCenter defaultCenter] postNotification:notification];
}

ViewController.m (garden variety)

- (IBAction)welcomeNotification:(UIButton *)sender {
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(sendGetRequest:) name:@"myNotification" object:[LPLocationManager sharedManager]];
    [center removeObserver:self];
    NSLog(@"welcomeNotication triggered");

}

Upvotes: 1

Views: 327

Answers (1)

Ricky
Ricky

Reputation: 10505

The way you do is not correct. Why you add the observer and then remove it immediately. Most of the time, we add/remove observer in viewWillAppear and viewWillDisappear or viewDidAppear and viewDidDisappear.

It should be something like:-

-(void)viewWillAppear:(BOOL)animated{
  [super viewWillAppear:animated];
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendGetRequest:) name:@"myNotification" object:nil];
}

-(void)viewWillDisappear:(BOOL)animated{
  [super viewWillDisappear:animated];
  [[NSNotificationCenter defaultCenter] removeObserver:self name:@"myNotification" object:nil];
}

Upvotes: 1

Related Questions