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]は常にゼロを返します。何がうまくいかない可能性があるアイデアはありますか?
ありがとう!
オブジェクトランドにとどまるには、CLLocation
のインスタンスを作成し、それらを可変配列に追加します。
CLLocation *towerLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lon];
[currentDisplayedTowers addObject:towerLocation];
CLLocationCoordinate
構造体をCLLocation
から戻すには、オブジェクトでcoordinate
を呼び出します。
CLLocationCoordinate2D coord = [[currentDisplayedTowers lastObject] coordinate];
SBが言ったように、アレイが割り当てられ、初期化されていることを確認してください。
また、2番目のコードスニペットのようにNSValue
ラッピングを使用することもできます。その場合、デコードは次のように簡単です。
NSValue *wrappedCoordinates = [currentlyDisplayedTowers lastObject]; // or whatever object you wish to grab
CLLocationCoordinate2D coordinates;
[wrappedCoordinates getValue:&coordinates];
私はcurrentlyDisplayedTowers = nil
これがすべての問題を引き起こしていました。また、initとallocに対する以前のアドバイスが必要でした。みんな助けてくれてありがとう!
配列を割り当てる必要があります。
NSMutableArray* currentlyDisplayedTowers = [[NSMutableArray alloc] init];
その後、それを使用することができます。終了したら必ずreleaseを呼び出すか、別のファクトリメソッドを使用してください。
この問題を抱えている他の人にとって、MapKit
の使用を計画している場合は、別の解決策があります。
(私が言う理由[〜#〜] if [〜#〜]もちろん、MapKit
などのモジュールを純粋にインポートするためです便利なラッパーメソッドはおそらく最善の方法ではありませんが、それでもここに行きます。)
@import MapKit;
次に、必要なときにいつでもMapKitの座標値ラッパーを使用します。
[coordinateArray addObject:[NSValue valueWithMKCoordinate:coordinateToAdd]];
あなたの例では..
[currentlyDisplayedTowers addObject:[NSValue valueWithMKCoordinate:new_coordinate]];