stuntman723
stuntman723

Reputation: 13

"Can't unwrap Optional.None" and I can't figure out why

This produces "fatal error: Can't unwrap Optional.None" and I don't seem to get why

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

If anyone can help me out, that would be great.

Upvotes: 0

Views: 199

Answers (1)

Connor
Connor

Reputation: 64644

The issue is accelerationData is nil and you aren't checking for this. From the docs:

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

You should check to make sure there is actually data before calling methods on it like this

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

That will ensure that if there is no data your app won't crash. Now to make sure you get some data.

You aren't getting any data because you're asking for data immediately after you initialize the core motion manager. You can show this by waiting a few seconds before checking. You can add NSThread.sleepForTimeInterval(3) right above the if let and run the project and it will enter the if let. Make sure you are using an actual device though, the simulator won't generate any motion data.

Upvotes: 1

Related Questions