我需要您幫助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!");
}
傳感器類我有開始傳感器功能:
-(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」消息?即這個處理程序是否被調用?此外,您是否在發佈問題時編輯了通知密鑰?也就是說,是否有可能在實際的代碼中輸入了通知名稱? (順便說一句,你可以通過不使用單獨的字符串文字來避免這個問題,而是在發佈時以及處理通知時都引用一個全局常量。) – Rob
是的,我可以看到「更新iphone acc數據」不,不幸的是,通知的名稱沒有錯誤...謝謝你幫助我! – superpuccio
np。底線,從操作隊列發佈通知沒有問題,所以它必須是別的東西。如果您仍然遇到問題,請從頭開始創建[MCVE](http://stackoverflow.com/help/mcve),這是一些能夠重現您所描述問題的最小示例。我無法重現您的問題(提示您的代碼中存在其他問題),但是如果您給我們提供可驗證的示例,那麼我們可以幫助您進一步提供幫助。 – Rob