Когда блок помещается в стек с помощью addObserverForName:
, метод еще не вернулся, поэтому gpsObserver имеет значение nil (в ARC) или мусор / неопределено (не в ARC).Объявите переменную, используя __block
снаружи, и это должно сработать.
__block __weak id gpsObserver;
gpsObserver = [[NSNotificationCenter defaultCenter]
addObserverForName:FI_NOTES[kNotificationsGPSUpdated]
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *note){
NSLog(@"run once, and only once!");
[[NSNotificationCenter defaultCenter] removeObserver:gpsObserver];
}];
Я добавил __weak, чтобы гарантировать отсутствие утечки памяти (согласно ответу Мэтта).Код не проверен.