Мне нужна помощь с NSNotificationCenter
. У меня есть класс под названием Sensor
и класс под названием SensorManager
. Я бы хотел отправить уведомление от Sensor
по адресу: SensorManager
. В SensorManager
я пишу этот код:Опубликовать уведомление в NSOperationQueue
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTestNotification:) name:@"TestNotification" object:nil];
И, очевидно, у меня есть эта функция:
- (void) receiveTestNotification:(NSNotification *) notification
{
if ([[notification name] isEqualToString:@"TestNotification"])
NSLog (@"Successfully received the test notification!");
}
В классе Sensor У меня есть функция, которая запускает датчик:
-(void)workSensor{
self.motionManager.accelerometerUpdateInterval = 0.05;
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[self.motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *data, NSError *error) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:self];
NSLog(@"Udapte iphone acc data!");
}];
}
}
К сожалению, SensorManager
не узнает уведомление. Странная вещь (с моей точки зрения) является то, что если я перееду код уведомления вне блока NSOperationQueue, все прекрасно работает (см ниже код):
-(void)workSensor{
//now the notification is here. Outside the block.
[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:self];
self.motionManager.accelerometerUpdateInterval = 0.05;
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[self.motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *data, NSError *error) {
NSLog(@"Udapte iphone acc data!");
}];
}
}
Как я могу поместить отправитель уведомления внутри NSOperationQueue
блок? Спасибо!
Вы видите сообщение «Udapte iphone acc data» при запуске приложения? То есть вообще-то называется обработчик? Кроме того, вы отредактировали свой ключ уведомления при публикации вопроса? I.e., возможно ли, что вы ошибочно указали имя уведомления в своем фактическом коде? (Кстати, вы можете избежать этой проблемы, не используя отдельные строковые литералы, а скорее иметь единственную глобальную константу, на которую ссылаетесь как при публикации, так и при обработке уведомления.) – Rob
Да, я вижу «Обновление данных iphone acc», и нет, к сожалению, нет ошибки во имя уведомления ... Спасибо, что помогли мне! – superpuccio
np. Итог, нет проблем с отправкой уведомлений из очереди операций, поэтому это должно быть что-то еще. Если у вас все еще есть проблемы, создайте [MCVE] (http://stackoverflow.com/help/mcve) с нуля, какой-то минимальный пример, который воспроизводит описанную вами проблему. Я не могу воспроизвести вашу проблему (предполагая, что проблема находится в другом месте вашего кода), но если вы дадите нам проверенный пример, мы можем помочь вам дальше. – Rob