Objective-c で行列を操作するクラスを作成しようとしています。もともとは NSArrays と NSNumbers を使用していましたが、これにより、実行中のコード (二重振り子のシミュレーション) が非常に遅くなったため、再試行することにしました。配列を C++ 配列として記述しますが、解決方法がわからない問題が発生しています。
-[SMFiniteDifferenceHelper matrixHandler]: unrecognized selector sent to instance 0x100107cb0
メソッドがヘッダー ファイルにあり、クラスに実装されているにもかかわらず、このコードを実行するとエラーが発生します。ただし、array[][]
値の1つだけを未設定のままにしておくと、コードは正常に実行されます...
休憩
self.matrixHandler = [[SMMatrixHandler alloc] init];
double **array1 = (double **)malloc(3*2*sizeof(double)); // height
for (int i = 0; i < 3; ++i)
array1[i] = new double[2]; // width
array1[0][0] = 1.0;
array1[1][0] = 2.0;
array1[0][1] = 1.0;
array1[1][1] = 0.0;
array1[0][2] = 4.0;
array1[1][2] = 1.0;
NSLog(@"array 1 : \n%@",[self.matrixHandler stringForMatrix:array1 ofSize:CGSizeMake(2, 3)]);
正常に動作します
self.matrixHandler = [[SMMatrixHandler alloc] init];
double **array1 = (double **)malloc(3*2*sizeof(double)); // height
for (int i = 0; i < 3; ++i)
array1[i] = new double[2]; // width
array1[0][0] = 1.0;
array1[1][0] = 2.0;
array1[0][1] = 1.0;
array1[1][1] = 0.0;
// array1[0][2] = 4.0;
array1[1][2] = 1.0;
NSLog(@"array 1 : \n%@",[self.matrixHandler stringForMatrix:array1 ofSize:CGSizeMake(2, 3)]);
メソッドstringForArray
は次のようになります。
- (NSString *)stringForMatrix:(double **)m ofSize:(CGSize)s {
NSString *string = @"";
for (int i = 0; i < s.height; i++) {
for (int j = 0; j < s.width; j++) {
string = [string stringByAppendingFormat:@"%f ",m[j][i]];
}
string = [string stringByAppendingString:@"\n"];
}
return string;
}