繁体   English   中英

NSOperationQueue并将代理发送到主线程

[英]NSOperationQueue and sending delegate to main thread

嗨,我有我的类传感器,其中有gps,陀螺仪,加速度计,我想从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];
}

您是否尝试过使用

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

你可以试试:

假设委托是在Sensor初始化方法中分配的NSObject<SensorDelegate>*类型的属性:

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

希望能帮助到你。

将要发送加速​​度计更新的队列更改为主队列。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM