Код обработчика (в данном случае, сбор данных акселерометра) выполняется асинхронно, когда мой акселерометр перемещается.Как сохранить данные, которые производятся в обработчике?
Это означает, что, если я пытаюсь сохранить data.x
, data.y
, data.z
в переменной, даже если переменная объявлена вне обработчика, переменная будет nil
, если я пытаюсь напечатать его в любом месте.
Как сохранить эти данные для доступа в других частях моего кода? (Или все должно происходить в моем обработчике, передовая практика, мудрая?)
if motionManager.accelerometerAvailable{
let motionQueue = NSOperationQueue.mainQueue()
motionManager.startDeviceMotionUpdatesToQueue(motionQueue,
withHandler: gravityUpdated)
}
func gravityUpdated(motion: CMDeviceMotion!, error: NSError!) {
let grav : CMAcceleration = motion.gravity;
println(grav.x)
}
Можете ли вы разместить часть своего кода? – ABakerSmith
Да! Обычно я считаю проблему более концептуальной, а не на уровне кода (которая, как правило, обфускает вещи), но иногда код помогает проиллюстрировать пример! Просто отправил короткую функцию. Я хочу сохранить grav.x. – Aspen
Возможно, вам нужно будет сохранить данные в некотором свойстве и вызвать некоторую функцию (или опубликовать уведомление) о том, что есть данные для обработки. Именно то, что вы принимаете, зависит от того, что вы хотите делать с данными. скажем, вы хотели обновить сюжет с новыми данными - вы могли бы вызвать функцию с чтением, которое добавило данные в свойство массива и обновил график. Если вы хотите озвучить предупреждение, если показания были выше некоторого порога, вы можете вызвать функцию, которая просто сравнивала значение, воспроизводила звук, если это необходимо, а затем отбрасывать показания. – Paulw11