Расширение CLPlacemark приводит к EXC BAD ACCESS
Хотя есть похожий вопрос найденВот это не дает ответа, по крайней мере, не для общей проблемы.
Моя проблема: сCoreLocation
геокодирование ограничено по скорости, и (веб-) служба, для которой я разрабатываю приложение, предоставляет собственную резервную службу геокодирования, я хочу использовать эту специальную службу геокодирования на случай, если я достигну предела скорости Apple. Более того, я считаю, что имеет смысл избегать использования пользовательского типа данных для результатов, возвращаемых этим пользовательским REST API, и поэтому хотел бы использовать данные, возвращаемые для генерации.CLPlacemark
s. Однако в документации говорится, чтоCLPlacemark
свойства, такие какlocation, locality, administrativeArea
и т. д.read-only
, Поэтому я создал подклассCLPlacemark
синтезируя необходимые свойства в частных переменных, к которым я могу получить доступ, т.е.
// interface: (.h)
@interface CustomPlacemark : CLPlacemark
- (nonnull id)initWithLocation: (nonnull CLLocation *)location
locality: (nullable NSString *)locality
administrativeArea: (nullable NSString *)adminArea
country: (nullable NSString *)country;
@end
// implementation (.m)
@implementation CustomPlacemark
@synthesize location = _location;
@synthesize locality = _locality;
@synthesize country = _country;
@synthesize administrativeArea = _administrativeArea;
- (nonnull id)initWithLocation: (nonnull CLLocation *)location
locality: (nullable NSString *)locality
administrativeArea: (nullable NSString *)adminArea
country: (nullable NSString *)country{
self = [super init];
if(self){
_location = location;
_locality = locality;
_administrativeArea = adminArea;
_country = country;
}
return self;
}
@end
Тестирование этого кода с помощью модульного теста, который анализирует данные из файла JSON и вызывает мойinitWithLocation: locality: administrativeArea: country:
Метод с данными приводит кEXC BAD ACCESS (code=1)
в конце теста (при закрытии}
метода теста) с переменной метки, указывающей наnil
хотя доNSLog(@"placemark: %@", customPlacemark);
выводит правильные значения. Кроме того, шаг за шагом тестирование показываетCustomPlacemark
работает (т.е. указывает на правильно заполненный объект) до достижения конца теста. Для меня это говорит о том, что что-то с освобождением моегоCustomPlacemark
идет не так - но что именно?
Любая помощь с благодарностью!