Ampliar los resultados de CLPlacemark en EXC BAD ACCESS
Aunque hay una pregunta similar encontradaaquí no proporciona una respuesta, al menos no para el problema general.
Mi problema es: desdeCoreLocation
la geocodificación tiene una tasa limitada y el servicio (web) para el que estoy desarrollando una aplicación proporciona su propio servicio de geocodificación alternativa, quiero usar este servicio de geocodificación personalizado en caso de que alcance el límite de tasa de Apple. Además, creo que tiene mucho sentido evitar un tipo de datos personalizado para los resultados devueltos por esta API REST personalizada y, por lo tanto, me gustaría utilizar los datos devueltos para generarCLPlacemark
s. Sin embargo, la documentación establece queCLPlacemark
propiedades tales comolocation, locality, administrativeArea
etc. sonread-only
. Por lo tanto, creé una subclase deCLPlacemark
sintetizando las propiedades necesarias en variables privadas a las que puedo acceder, es decir:
// 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
Probar este código con una prueba unitaria que analiza los datos de un archivo JSON y llama a miinitWithLocation: locality: administrativeArea: country:
método con los resultados de datos en unEXC BAD ACCESS (code=1)
al final de la prueba (al cierre}
del método de prueba) con la variable de marca de posición apuntando anil
aunque un previoNSLog(@"placemark: %@", customPlacemark);
da salida a los valores correctos. Además, recorrer la prueba línea por línea muestra elCustomPlacemark
trabajando (es decir, apuntando a un objeto debidamente poblado) hasta llegar al final de la prueba. Para mí esto indica que algo con la desasignación de miCustomPlacemark
sale mal, pero ¿qué es exactamente?
¡Cualquier ayuda es muy apreciada!