2014-06-20 49 views
0

这将产生“致命错误:无法解开Optional.None”,我似乎不明白为什么“不能拆开包装Optional.None”我想不通为什么

var motionManager = CMMotionManager() 
motionManager.accelerometerUpdateInterval = 0.2 
motionManager.startAccelerometerUpdates() 
var accelerationData = motionManager.accelerometerData 
var accel = accelerationData.acceleration.x 

如果有人能帮助我,那会很好。

+0

我想弄清楚加速度的x值,但我无法弄清楚如何去做。任何帮助,将不胜感激 – stuntman723

+0

None是None(从Obj-C带入为零)。如何获得无财产? – user2864740

+0

http://stackoverflow.com/questions/24006287/cant-unwrap-optional-none,http://stackoverflow.com/questions/24132010/cant-unwrap-optional-none?rq=1 – user2864740

回答

1

问题是accelerationData是零,你没有检查这个。从docs

If no accelerometer data is available, the value of this property is nil.

您应该检查调用它的方法是这样

if let accelerationData = motionManager.accelerometerData { 
    var accel = accelerationData.acceleration.x 
} 

这将确保,如果没有数据您的应用程序不会崩溃之前的数据,以确保真正有。现在确保你得到一些数据。

您没有收到任何数据,因为您在初始化核心运动管理器后立即要求提供数据。您可以在检查前等待几秒钟来显示。你可以在上面添加NSThread.sleepForTimeInterval(3)如果让我们运行项目,它会进入if let。确保您使用的是实际设备,但模拟器不会生成任何运动数据。

相关问题