NSMutableArray of ClLocationCoordinate2D - PullRequest
       2

NSMutableArray of ClLocationCoordinate2D

21 голосов
/ 23 февраля 2011

Я пытаюсь создать, затем извлечь массив объектов 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)] ];

И в любом случае, счет [currentDisplayedTowers] всегда возвращает ноль. Есть идеи, что может пойти не так?

Спасибо!

Ответы [ 5 ]

49 голосов
/ 23 февраля 2011

Чтобы остаться на земле объекта, вы можете создать экземпляры CLLocation и добавить их в изменяемый массив.

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

Чтобы получить структуру CLLocationCoordinate из CLLocation, вызовите coordinate на объекте.

CLLocationCoordinate2D coord = [[currentDisplayedTowers lastObject] coordinate];
3 голосов
/ 23 февраля 2011

Как сказал SB, убедитесь, что ваш массив выделен и инициализирован.

Вы также, вероятно, захотите использовать обтекание NSValue, как во втором фрагменте кода. Тогда декодирование так же просто, как:

NSValue *wrappedCoordinates = [currentlyDisplayedTowers lastObject]; // or whatever object you wish to grab
CLLocationCoordinate2D coordinates;
[wrappedCoordinates getValue:&coordinates];
1 голос
/ 24 февраля 2011

У меня было currentlyDisplayedTowers = nil, что вызывало все проблемы. Кроме того, предыдущий совет для init и alloc был необходим Спасибо всем за помощь!

1 голос
/ 23 февраля 2011

Вам нужно выделить свой массив.

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

Тогда вы можете использовать его.Обязательно вызовите release, когда закончите с ним, или используйте другой фабричный метод.

0 голосов
/ 28 ноября 2017

Для всех, кто имеет эту проблему, есть другое решение, если вы планируете использовать MapKit.

(Причина, по которой я говорю IF , конечно, заключается в том, что импорт модуля, такого как MapKit, исключительно для удобного метода-обертки, вероятно, не лучший ход ... нотем не менее, вы идете.)

@import MapKit;

Тогда просто используйте упаковщик значений координат MapKit всякий раз, когда вам нужно:

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

В вашем примере ..

[currentlyDisplayedTowers addObject:[NSValue valueWithMKCoordinate:new_coordinate]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...