いつもお世話になっております。
今回はSwiftの、CMPedometerを使用した歩数計とXcodeのシミュレータの関係について質問させていただきます。
###問題点
現在、歩数計を作っています。
UIはそれぞれ、歩数の計測開始と、同じく歩数の計測終了の役割をもたせた2つのUIButtonから成るシンプルなものです。
実機にインストールして、実際に動かしたところ特に問題はないと感じたのですが、シミュレータでButton等の動作確認を行おうとすると「計測停止
」ボタンを押した時にシミュレータがクラッシュしてしまうことが判明しました。
歩数計測は実機でしかできないと思うので、シミュレータがクラッシュするのは想定していたのですが、それならば計測を開始した時点でクラッシュすると思っていたのです。
終了する時のみクラッシュするのは何か自分のプログラムに原因があるのかと思い、質問させていただいた次第です。
###ソースコード
lang
1import UIKit 2import CoreMotion 3 4class FourViewController: UIViewController { 5 6 7 //歩数 8 @IBOutlet weak var Count: UILabel! 9 //計測の開始、終了を通知するメッセージ 10 @IBOutlet weak var Message: UILabel! 11 12 // class wide constant !! 13 let pedometer = CMPedometer() 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 // Do any additional setup after loading the view. 19 } 20 21 @IBAction func CountStart(_ sender: Any) { 22 23 self.Count.text = "0" 24 self.Message.text = "計測が開始されました。" 25 // CMPedometerの確認 26 if CMPedometer.isStepCountingAvailable() { 27 28 self.pedometer.startUpdates(from: NSDate() as Date) { 29 (data: CMPedometerData?, error) -> Void in 30 DispatchQueue.main.async(execute: { () -> Void in 31 if error == nil { 32 // 歩数 33 let steps = data!.numberOfSteps 34 self.Count.text = "\(steps)" 35 } 36 }) 37 } 38 } 39 } 40 41 @IBAction func CountStop(_ sender: Any) { 42 self.pedometer.stopUpdates() 43 self.Message.text = "計測を終了しました。\nもう一度計測開始を押すと歩数がリセットされます。" 44 } 45 46 override func didReceiveMemoryWarning() { 47 super.didReceiveMemoryWarning() 48 // Dispose of any resources that can be recreated. 49 } 50
###エラーメッセージ
lang
1libsystem_kernel.dylib`__abort_with_payload: 2 0x10cc340a0 <+0>: movl $0x2000209, %eax ; imm = 0x2000209 3 0x10cc340a5 <+5>: movq %rcx, %r10 4 0x10cc340a8 <+8>: syscall 5-> 0x10cc340aa <+10>: jae 0x10cc340b4 ; <+20> //ここでThread 9: signal SIGABRT 6 0x10cc340ac <+12>: movq %rax, %rdi 7 0x10cc340af <+15>: jmp 0x10cc2dcaf ; cerror_nocancel 8 0x10cc340b4 <+20>: retq 9 0x10cc340b5 <+21>: nop 10 0x10cc340b6 <+22>: nop 11 0x10cc340b7 <+23>: nop 12
###開発環境
Xcode8.3
Swift3.0
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー