web-dev-qa-db-ja.com

ClLocationCoordinate2DのNSMutableArray

CLLocationCoordinate2Dオブジェクトの配列を作成して取得しようとしていますが、何らかの理由で配列は常に空です。

私が持っています:

NSMutableArray *currentlyDisplayedTowers;
CLLocationCoordinate2D new_coordinate = { currentTowerLocation.latitude, currentTowerLocation.longitude };
[currentlyDisplayedTowers addObject:[NSData dataWithBytes:&new_coordinate length:sizeof(new_coordinate)] ];

データを追加するためにもこれを試しました:

[currentlyDisplayedTowers addObject:[NSValue value:&new_coordinate withObjCType:@encode(struct CLLocationCoordinate2D)] ];

いずれにせよ、[currentlyDisplayedTowerscount]は常にゼロを返します。何がうまくいかない可能性があるアイデアはありますか?

ありがとう!

21
Sina

オブジェクトランドにとどまるには、CLLocationのインスタンスを作成し、それらを可変配列に追加します。

CLLocation *towerLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lon];
[currentDisplayedTowers addObject:towerLocation];

CLLocationCoordinate構造体をCLLocationから戻すには、オブジェクトでcoordinateを呼び出します。

CLLocationCoordinate2D coord = [[currentDisplayedTowers lastObject] coordinate];
49
Anurag

SBが言ったように、アレイが割り当てられ、初期化されていることを確認してください。

また、2番目のコードスニペットのようにNSValueラッピングを使用することもできます。その場合、デコードは次のように簡単です。

NSValue *wrappedCoordinates = [currentlyDisplayedTowers lastObject]; // or whatever object you wish to grab
CLLocationCoordinate2D coordinates;
[wrappedCoordinates getValue:&coordinates];
3
Ben Cochran

私はcurrentlyDisplayedTowers = nilこれがすべての問題を引き起こしていました。また、initとallocに対する以前のアドバイスが必要でした。みんな助けてくれてありがとう!

1
Sina

配列を割り当てる必要があります。

NSMutableArray* currentlyDisplayedTowers = [[NSMutableArray alloc] init];

その後、それを使用することができます。終了したら必ずreleaseを呼び出すか、別のファクトリメソッドを使用してください。

1
NG.

この問題を抱えている他の人にとって、MapKitの使用を計画している場合は、別の解決策があります。

(私が言う理由[〜#〜] if [〜#〜]もちろん、MapKitなどのモジュールを純粋にインポートするためです便利なラッパーメソッドはおそらく最善の方法ではありませんが、それでもここに行きます。)

@import MapKit;

次に、必要なときにいつでもMapKitの座標値ラッパーを使用します。

[coordinateArray addObject:[NSValue valueWithMKCoordinate:coordinateToAdd]];

あなたの例では..

[currentlyDisplayedTowers addObject:[NSValue valueWithMKCoordinate:new_coordinate]];
0