如何将参数传递到块中

时间:2013-11-23 20:01:25

标签: ios ios7 objective-c-blocks exc-bad-access

我正在使用iOS动画管理器,它使用块处理程序。我有一个“加速”对象......

@property (atomic, readonly) CMAccelerometerData * rawAccelerometerData;

在.m文件中,我有......

-(void) startServices{
    [_motionManager startAccelerometerUpdatesToQueue:_queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
        _rawAccelerometerData = accelerometerData;
        dispatch_async(dispatch_get_main_queue(),^(void){
           [delegate accelerometerUpdate:accelerometer];
        });
    }];
}

Delegate是一个视图控制器:

-(void) accelerometerUpdate:(Accelerometer *) accelerometer {
   _accelX.text = [NSString stringWithFormat:@"%f", accelerometer.rawAccelerometerData.acceleration.x];
  _accelY.text = [NSString stringWithFormat:@"%f", accelerometer.rawAccelerometerData.acceleration.y];
  _accelZ.text = [NSString stringWithFormat:@"%f", accelerometer.rawAccelerometerData.acceleration.z];

}

但是,当我访问_rawAccelerometerData时,我会收到Bad Access Exception

我的猜测是accelerometerData对象被破坏了。我该怎么做?

1 个答案:

答案 0 :(得分:0)

这是一个多线程问题。 (感谢holex将我指向那个方向。)

始终更新_rawAccelerometerData,并且新对象正在替换旧对象(由于ARC而被破坏)。

在另一个线程上,我正在访问_rawAccelerometerData。偶尔,当我访问_rawAccelerometerData时,我正在访问该对象的较旧“副本”。由于该对象已经被破坏,我得到了一个不良访问。