質問: 1週間前から、Swiftを勉強中の者です。 CMPedometerを使って歩数、歩行速度、距離、階数、歩行時間を表示する簡単な万歩計アプリを作りました。 そこで生じた問題なのですが、自分の作ったアプリは歩いてる間は数字がカウントされず、静止してから13秒くらい経ってようやく数字が表示されます。 調べてみたところCMPedometerにはリアルタイムに数字を表示させたり、更新頻度を自分で設定することはできないと出てきました。 AppStoreに出ている人気の万歩計アプリをダウンロードして自分のものと比較してみたのですが、人気のアプリにもラグはあるものの表示される時間が静止してから3〜5秒ととても短いので、このラグを少なくするにはどうしたらいいか教えて欲しいです。よろしくお願いします。 ### 補足情報(言語/FW/ツール等のバージョンなど) Swift3.0、Xcode(Version 8.3.3)を使用
回答: `startUpdates(from:withHandler:)`を使っているとして、ハンドラの中でラベルに値を設定していると思いますが、ハンドラの中はメインスレッドではないので誤動作を起こしているのだと思います。 **UIへのアクセスはメインスレッドで行わないといけません。** ``` pedometer.startUpdates(from: Date(), withHandler: { (data, error) in print("isMainThread=", Thread.isMainThread) //=> false print("\(data.numberOfSteps)steps") //print文は問題なし //メインスレッドで実行する DispatchQueue.main.async { print("isMainThread=", Thread.isMainThread) //=> true self.label.text = "\(data.numberOfSteps)steps" } } ```