NSOperationQueue和发送委托给主线程

问题描述:

嗨,我有我的类传感器在那里我有GPS,陀螺仪,加速度计,我想Ø从nsoperationqueue在委托发送数据:NSOperationQueue和发送委托给主线程

@protocol SensorsDelegate <NSObject> 
@optional 
- (void)motionManagerDidAccelerateData:(CMAccelerometerData *)accelerometerData; 
@end 


- (void)startAccelerometr 
{ 
    if (motionManager.accelerometerAvailable) { 

     self.motionManager.accelerometerUpdateInterval = 1.0/10.0; 
     [self.motionManager startAccelerometerUpdatesToQueue:self.operationQueue 
      withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
      if (error) { 
       [motionManager stopAccelerometerUpdates]; 
      } 
      else { 
       [self.delegate motionManagerDidAccelerateData:accelerometerData]; 
      } 
     }]; 
    } 
} 

如何将数据发送到委派这是在主线程中?或发送加速器数据?

放在同一类onMainThread:方法,改变你的代码是这样

- (void)startAccelerometr 
{ 
     if (motionManager.accelerometerAvailable) { 

     self.motionManager.accelerometerUpdateInterval = 1.0/10.0; 
     [self.motionManager startAccelerometerUpdatesToQueue:self.operationQueue 
      withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
      if (error) { 
       [motionManager stopAccelerometerUpdates]; 
      } 
      else { 
       [self performSelectorOnMainThread:@selector(onMainThread:) 
        withObject:accelerometerData waitUntilDone:NO]; 
      } 
     }]; 
    } 
} 

- (void)onMainThread:(id)accelerometerData{ 
    [self.delegate motionManagerDidAccelerateData:accelerometerData]; 
} 
+0

我会检查它的明天,但似乎看起来非常漂亮+1 – mientus 2012-02-16 16:54:01

您是否尝试过使用

[self.delegate performSelectorOnMainThread:@selector(motionManagerDidAccelerateData:) withObject:accelerometerData waitUntilDone:NO]; 
+0

不错的.... +1这个 – 2012-02-16 16:37:31

+0

UE的委托不具备主thred performselector:/我用notofication中心fonally – mientus 2012-02-16 16:51:19

+2

您可以performSelectorInMainThread只要您的代理被定义为NSObject *而不是id 。出于某种原因,id只是一个无类型的指针,而不是NSObject的快捷方式。 – 2012-02-16 17:10:32

改变队列您要发送的加速度更新到主队列。

[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
+0

我不想在主thred中使用加速度计! – mientus 2012-02-16 16:51:51

+0

只有更新将在主线程上。 – DHamrick 2012-02-16 19:05:22

+0

它不工作:/ – mientus 2012-02-17 08:35:25

你可以试试:

假设委托是在传感器init方法分配NSObject<SensorDelegate>*类型的属性:

[self.delegate performSelectorOnMainThread:@selector(motionManagerDidAccelerateData:) withObject:accelerometerData waitUntilDone:NO]; 

希望它能帮助。

+0

它不起作用 – mientus 2012-02-17 08:35:31