デバッグ ツールの使用方法を理解するための助けが必要です。このトピックに関する以前の投稿では、NSZombie の使用とブレークポイントの設定が提案されています。これらは私にとってはうまくいきません。つまり、それらを適切に使用する方法、またはそれらが私に言っていることを解釈する方法がわかりません。
(基本的に、私は孤立した環境で活動しています -- 私の職場や社交界では、客観的な C プログラミングを行う人は誰もいません...)
これが問題のコードです。私の考えは、100 個のオブジェクトの移動配列を作成することです。ルーチン motionDataArray は、motionManager の startDeviceMotionUpdatesUsingReferenceFrame メソッドによって呼び出されます。配列に値が入力され、その長さが 100 に達すると、最初のオブジェクトが削除されるため、配列には常に 100 個のオブジェクトしか存在しません。このようにして、データの平均を取り、多くのノイズを取り除くことができると思います。
(おそらくこの目標を達成するためのより良い方法があると思いますが、ここに私が思いついたものがあります...)
- (void) motionDataArray: (CMCalibratedMagneticField) field
{
NSDictionary *motionData = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithDouble: motionManager.deviceMotion.gravity.x],@"gravity_x",
[NSNumber numberWithDouble: motionManager.deviceMotion.gravity.y],@"gravity_y",
[NSNumber numberWithDouble: motionManager.deviceMotion.gravity.z],@"gravity_z",
[NSNumber numberWithDouble: field.field.x],@"mag_x",
[NSNumber numberWithDouble: field.field.y],@"mag_y",
[NSNumber numberWithDouble: field.field.z],@"mag_z",
[NSNumber numberWithDouble: `enter code here`locationManager.heading.magneticHeading],@"mag_heading",
[NSNumber numberWithDouble: motionManager.deviceMotion.attitude.roll],@"roll",
[NSNumber numberWithDouble: motionManager.deviceMotion.attitude.yaw],@"yaw",
[NSNumber numberWithDouble: motionManager.deviceMotion.attitude.pitch],@"roll",
nil];
//NSLog(@"%d",[motionArray count]);
if([timerArray count] > arrayCount - 1)
{
int i = [timerArray count] - arrayCount;
for (int j = 0; j < i + 1; j++)
{
[motionArray removeObjectAtIndex:0];
}
}
[motionArray addObject:motionData];
}
コードは最初の 200 回程度の反復で正常に実行され、その後クラッシュしてエラーが発生します。解放されているポインターが割り当てられていません。
Instrumentsまたはその他のデバッグ方法からの出力を解釈する方法についての良い指針は、私にとって大きな助けになるでしょう。よろしくお願いします...
ティム・レッドフィールド