質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1307閲覧

コンパイルは通るのに動作せずアプリが落ちてしまいます、、

SKMT

総合スコア57

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/11/20 05:39

###前提・実現したいこと
textviewに加速度値のデータを少数3桁までだけ表示させたいのですが、うまくいきません
コンパイルは通るしクリーンしてもエラーが消えずどこをどう直していいかわかりません

###発生している問題・エラーメッセージ
acceleration CMAcceleration
self Mytest5.ViewController 0x000000010350d640
UIKit.UIViewController UIViewController
motionManager CMMotionManager 0x000005a10248d4cd
dataX [Double]
dataY [Double]
dataZ [Double]
accelX UILabel! 0x000005a10248d4cd
accelY UILabel! 0x000005a10248d4cd
accelZ UILabel! 0x000005a10248d4cd
TextView UITextView! 0x000005a10248d4cd

###該当のソースコード

Swift4

1import UIKit 2import CoreMotion 3 4class ViewController: UIViewController { 5 6 let motionManager = CMMotionManager() 7 var dataX:[Double] = [] 8 var dataY:[Double] = [] 9 var dataZ:[Double] = [] 10 11 @IBOutlet weak var accelX: UILabel! 12 @IBOutlet weak var accelY: UILabel! 13 @IBOutlet weak var accelZ: UILabel! 14 @IBOutlet weak var TextView: UITextView! 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 if motionManager.isAccelerometerAvailable { 19 motionManager.accelerometerUpdateInterval = 0.2 20 21 motionManager.startAccelerometerUpdates( 22 to: OperationQueue.current!, 23 withHandler: {(accelData: CMAccelerometerData?, errorOC: Error?) in 24 self.outputAccelData(acceleration: accelData!.acceleration) 25 }) 26 27 } 28 } 29 func outputAccelData(acceleration: CMAcceleration){ 30 accelX.text = String(format: "x = %.4f", acceleration.x) 31 accelY.text = String(format: "y = %.4f", acceleration.y) 32 accelZ.text = String(format: "z = %.4f", acceleration.z) 33 34 dataX.append(acceleration.x) 35 dataY.append(acceleration.y) 36 dataZ.append(acceleration.z) 37 38 TextView.text = String(format: "%.3f %.3f %.3f \n",dataX,dataY,dataZ) 39 40 if ((acceleration.x >= 1.0)||(acceleration.x <= -1.0)) { 41 accelX.textColor = UIColor.red } 42 else if((acceleration.x <= 1.0)||(acceleration.x >= -1.0)) { 43 accelX.textColor = UIColor.black } 44 if((acceleration.y >= 1.0)||(acceleration.y <= -1.0)) { 45 accelY.textColor = UIColor.red } 46 else if((acceleration.y <= 1.0)||(acceleration.y >= -1.0)) { 47 accelY.textColor = UIColor.black } 48 if((acceleration.z >= 1.0)||(acceleration.z <= -1.0)) { 49 accelZ.textColor = UIColor.red } 50 else if((acceleration.z <= 1.0)||(acceleration.z >= -1.0)) { 51 accelZ.textColor = UIColor.black } 52 53 } 54 func stopAccelerometer(){ 55 if (motionManager.isAccelerometerActive) { 56 motionManager.stopAccelerometerUpdates() 57 } 58 } 59 override func didReceiveMemoryWarning() { 60 super.didReceiveMemoryWarning() 61 } 62 63}

###試したこと
ビルド前にクリーンしてみた

###補足情報(言語/FW/ツール等のバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

dataX.append(acceleration.x)
ではデータが配列の要素として追加されどんどん要素が増加していってしまいます

dataX.append(acceleration.x)以下をコメントアウトさせてみてください
それでエラーにならなければ、もう一度なにをしたいのか考え直して
修正してみてはどうでしょう

投稿2017/11/20 05:48

aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SKMT

2017/11/20 05:52

回答ありがとうございます。要素を追加していってそのデータとして表示させたいんですけどそういう場合はどうしたらいいですか?最終的には配列に格納したデータをcsvなどにしてパソコンに移動してエクセルなどでグラフ化したいと考えてます
aja

2017/11/20 06:10

グラフにするにしても横軸、多分時間はどの程度で間隔がどれくらいが適当なのか仕様を検討しましょう。間隔が1分であれば要素は1分毎にするか、平均を出すとか、いずれにしろ加速度値の生データでは瞬間変動が大きいのでフィルターをかけてから取り込んだ方がいいでしょう。もっともその瞬間変動をとらえたい場合もありますから、仕様、目的に合ったように手をかける必要があります
SKMT

2017/11/21 03:11

コメントありがとうございます。返信遅れて申し訳ありません。フィルターかけていきたいと思います。細かな動作などの検知がしたいので時間感覚はこのままでローパスとハイパス両方とりたいのですが、オススメのサイトや書籍などあれば教えて欲しいです。現状swift4の知識がなさすぎて困ってます。。
aja

2017/11/21 03:47 編集

その前に、元々の質問のアプリが落ちる原因ははっきりしたのでしょうか それを確認しないでフィルターの実装をしても時間の浪費になりかねません 「dataX.append(acceleration.x)以下をコメントアウト」してどうなったのでしょう >ススメのサイトや書籍など これは別にSwiftの事ではありません、概念的な事や、ソフトウェアでどう実現するかというのはネットで勉強できます。 概念が分かったうえでSwiftでのEMAフィルターについては こちらにあります(Swift3) https://i-app-tec.com/ios/accelerometer.html
SKMT

2017/11/21 12:25

以下4行をコメントアウトしたらDevelopment cannot be enabled while your device is locked.と表示されます。iPhoneのロックは外れてるのですが、そのまま動きません。 サイトありがとうございます。精進します、、、
aja

2017/11/22 01:36

プライオリティとして思うに エラー原因を明確にして修正する dataX:[Double] = []の使い方を検討。 このやり方が問題と前のスレッドから言っていますが、無限に配列の要素を作り出すこと 最終的にどうするのがいいか考える、あるいはテストして最適なものを探す 全てのデータをここで取り込む必要があるのか、限定してもいいのでは、 合わせて、CSVに書き込むことも並行して検討 その後で、データとしてフィルターをかましたほうがいいかどうかの検討 ではないかと思います
SKMT

2017/11/22 06:44

わかりました。ありがとうございます。ajaさんの助言を踏まえた上でもうちょっと頑張ってみます。
SKMT

2017/11/22 06:50

例えば配列の個数を1000コまでにしようと思ったらどのようにしたらいいですか?
aja

2017/11/23 00:52

試してからその結果をもって質問するのがTeratail的なのですが、ただそうすると当初の質問から外れてしまいますね。 当初の質問から外れていくのはあまりよくないので、このスレッドの答え(あなたの疑問は続くとして)が出ているのであればクローズして新しく質問したほうがいいでしょう。コードも書けますし。 1000個がいいのか悪いのかは別にして非同期という方法があるのを理解しておいたほうがいいでしょう https://www.google.com/search?q=%E9%9D%9E%E5%90%8C%E6%9C%9F+swift&oq=%E9%9D%9E%E5%90%8C%E6%9C%9F+swift&aqs=chrome..69i57j0l5.19980j1j8&sourceid=chrome&ie=UTF-8
SKMT

2017/11/24 01:42

配列で調べてみたり参考書を読んでいるのですが、空の配列の数の指定が分からないです。 そうですね、ここは解決したことにして次に行ってみます 非同期について調べてみたのですがGCDのAPIとかが出てきて難しそうでしたしあとこれが自分のプログラムにどう生かせるのか分からないです。
aja

2017/11/24 07:24

非同期とは何かということを理解すると必要性がわかります
SKMT

2017/11/24 07:46

配列に加速度を格納する処理とその配列をcsvに書き込む処理を非同期的に行うとかそういうことですか?むしろその後グラフ化することまで考えたら同期させた方がいい気がしますけど、、、 理解が足りず申し訳ありません
aja

2017/11/24 12:55

リアルタイムで加速度をグラフで表示させることとcsvに書き込むことを一連にする必要はないですね、グラフはそのままダイレクトに表示させてもいいでしょうけれど、その記録は非同期で別に取ればいいでしょう。いずれにしろ実際にやってみればいいとは思います。加速度計測>CSV記録>グラフ表示をそのまま同期でできる「ケース」もあります。結局何がゴールなのかどういう結果を目的にしているかによります。
SKMT

2017/11/26 05:42

グラフの表示に外部ライブラリを使おうと思ったのですが難しそうなので、データをcsvで出力してそれをエクセルでグラフ化しようと思います。非同期だと配列に入る順番と表示とかの順番がグチャグチャになって正しい時間ー加速度のデータが取れなそうな気もしますけどどうなんですかね
SKMT

2017/11/26 05:43

あ、とりあえず意見を参考にやってみてぶち当たったらまた質問させてください。いろいろな助言ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問