2012-02-16 82 views
0

嗨,我有我的類傳感器在那裏我有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]; 
      } 
     }]; 
    } 
} 

如何將數據發送到委派這是在主線程中?或發送加速器數據?

回答

2

放在同一類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

2

您是否嘗試過使用

[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

1

改變隊列您要發送的加速度更新到主隊列。

[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

2

你可以試試:

假設委託是在傳感器init方法分配NSObject<SensorDelegate>*類型的屬性:

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

希望它能幫助。

+0

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