私は別のプロジェクトへの補助として書いたロギングアプリケーションで、加速度計データをCoreData SQLデータベースに記録しようとしています。アプリケーションは簡単です:それはf = 100Hzの頻度でコアデータで作成された構造に加速度データを記録します。Accelerometer iOS上のデータポイントが見つかりません(Objective C)
いくつかのテストケースでは、データベースに実際の周波数が5Hzに近いか、0.1Hzで低くなっていることを除いて、すべてが素晴らしいです。
私はセットアップをしたドキュメントごとの加速度計:
は// Accelerometer
UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.updateInterval = 1./100; // T = 1/f. f=100Hz.
accelerometer.delegate = self;
その後、コールバックに、私は単純にコアデータに新しい行にそれをログ:
- (void)accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration{
AccelerometerData *dataPoint = [NSEntityDescription insertNewObjectForEntityForName:@"AccelerometerData" inManagedObjectContext:self.managedObjectContext];
[self.session addAccelerometerDataObject:dataPoint];
dataPoint.x = [NSNumber numberWithDouble:acceleration.x];
dataPoint.y = [NSNumber numberWithDouble:acceleration.y];
dataPoint.z = [NSNumber numberWithDouble:acceleration.z];
dataPoint.timestamp = [NSNumber numberWithDouble:acceleration.timestamp];
任意のアイデアを理由の欠如データ?
私はコアの位置からずっと高い周波数を得ています。私は管理されたエンティティに新しい行を挿入することは費用がかかることを知っています - しかし、私は100分の1のスケールでそれをイメージすることはできません!
私がテストしていたとき、私は実際に= 0.01で実装しました。私はここにコピーするときに1/100と書いたので、それが原因だとは思わない。 デバッグ中に間隔を記録して実行しました。私は約8-9HzでNSLog更新を見ていて、updateIntervalを0.01に設定しました。 おそらく私はバッチ更新を試み、それがトリックをするかどうかを見ていきます。私はそれを試した後、ここに投稿します!新しいデータベースエントリを作成すると、10000000nsほどのコストがかかる可能性があります。 – Steve
データベース書き込みのタイミングを取ったり、バックグラウンドスレッドに入れてみてください。彼らが比較的重要な時間を取らないことが確認された場合、これはバグ報告の価値があると思います... – jbat100