私の地図オブジェクトには一連の座標があります。常に同じ数の座標を持つとは限りません。Java ではDouble[] xpoints
、次のようにマップをインスタンス化するときに、オブジェクトを次のように宣言し、そのサイズを設定しますxpoints = new double[npoints]
。
Objective-Cでこれを行うにはどうすればよいですか?
私はこれをやってみました:@property(nonatomic) double * xpoints;
しかし、NSLogで印刷すると、どういうわけかすべての値が0になります。
マップの初期化:
-(id)initWithXpoints:(double[]) xpointss Ypoints:(double[]) ypointss Npoints:(int)npointss
{
self = [super init];
if (self)
{
self.xpoints = xpointss;
self.ypoints = ypointss;
self.npoints = npointss;
}
return self;
}
しかし、奇妙なことが起こります。マップを作成したオブジェクトから xpoints[0] を出力すると、値がゼロに変更されます。初めて印刷するとうまくいきます。2回目はゼロを出力します。
init に送信された xpointss がメモリから削除されるために発生すると思います。ポインターの場合、xpoints プロパティを「インスタンス化」するにはどうすればよいですか?
これを行うより良い方法はありますか?
追加: 次のような一時的な xpoints を作成してみました:
double tempxpoints[npointss];
double tempypoints[npointss];
for (int i = 0; i < npointss; i++)
{
tempxpoints[i] = xpointss[i];
tempypoints[i] = ypointss[i];
}
self.xpoints = tempxpoints;
self.ypoints = tempypoints;
しかし、それでもうまくいきませんでした。
編集:すべての回答に感謝します。これが最終的な初期化コードになりました。
-(id)initWithXpoints:(double[]) xpointss Ypoints:(double[]) ypointss Npoints:(int)npointss
{
self = [super init];
if (self)
{
_xpoints = [[NSMutableArray alloc] init];
_ypoints = [[NSMutableArray alloc] init];
for (int i = 0; i < npointss; i++)
{
NSNumber *tempx = [NSNumber numberWithDouble:xpointss[i]];
NSNumber *tempy = [NSNumber numberWithDouble:ypointss[i]];
[_xpoints addObject:tempx];
[_ypoints addObject:tempy];
}
_npoints = npointss;
}
return self;
}