Подтвердить что ты не робот

NSMutableArray из ClLocationCoordinate2D

Я пытаюсь создать затем получить массив объектов 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 count] всегда возвращает ноль. Любые идеи, что может пойти не так?

Спасибо!

4b9b3361

Ответ 1

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

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

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

CLLocationCoordinate2D coord = [[currentDisplayedTowers lastObject] coordinate];

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

@import MapKit;

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

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

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

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