title: iOS NSNotificationCenter Observer not being removed
body: <p>I have the following code within AppDelegate. The purpose being to create a couple of observers, and then call some code. Once that code completes it then posts a notification, and the observer should then remove both observers and call the completion handler.</p>
  
  <p>My issue is that it appears that the observers are not being removed as I expected. The notification is posted, and the NSLog entry is written to console, so I know that the observer is working. However, on the second time of calling, the NSLog is called twice, third time three times etc.</p>
  
  <p>My thoughts are that this is to do with the removal being within the block of code that is running from the observer, however, I am unsure how I can resolve this (if indeed this is what the issue is).</p>
  
  <p>Could someone be so kind as to explain how I can achieve this?</p>
  
  <p>Thanks.</p>
  
  <pre><code>-(void) application:(UIApplication *)application performFetchWithCompletionHandler:
  (void (^)(UIBackgroundFetchResult))completionHandler {
  
      [[NSNotificationCenter defaultCenter] addObserverForName:@"fetchDidCompleteNewData" object:nil
                                                       queue:nil usingBlock:^(NSNotification *completed) {
  
                                                           //Remove Observers
                                                           [[NSNotificationCenter defaultCenter] removeObserver:self
                                                                                                           name:@"fetchDidCompleteNewData"
                                                                                                         object:nil];
                                                           [[NSNotificationCenter defaultCenter] removeObserver:self
                                                                                                           name:@"fetchDidCompleteNoData"
                                                                                                         object:nil];
  
  
                                                           // Post completion
                                                           completionHandler(UIBackgroundFetchResultNewData);
                                                           NSLog(@"Background fetch completed... New Data");
                                                       }];
  
      [[NSNotificationCenter defaultCenter] addObserverForName:@"fetchDidCompleteNoData" object:nil
                                                         queue:nil usingBlock:^(NSNotification *completed) {
  
                                                             //Remove Observers
                                                             [[NSNotificationCenter defaultCenter] removeObserver:self
                                                                                                             name:@"fetchDidCompleteNoData"
                                                                                                           object:nil];
  
                                                             [[NSNotificationCenter defaultCenter] removeObserver:self
                                                                                                             name:@"fetchDidCompleteNewData"
                                                                                                           object:nil];
  
                                                             //post completion
                                                             completionHandler(UIBackgroundFetchResultNoData);
                                                             NSLog(@"Background fetch completed... No New Data");
  
                                                         }];
  
      GetDetails *getDetails = [[GetDetails alloc] init];
      [getDetails backgroundRefresh];
  
  }
  
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  {
      [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
  
      return YES;
  }
  </code></pre>