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