A extensão do CLPlacemark resulta em EXC BAD ACCESS
Embora exista uma pergunta semelhante encontradaaqui não fornece uma resposta, pelo menos não para o problema geral.
Meu problema é: DesdeCoreLocation
A geocodificação é limitada à taxa e o serviço (web-) para o qual estou desenvolvendo um aplicativo fornece seu próprio serviço de geocodificação de fallback. Quero usar esse serviço de geocodificação personalizado caso atinja o limite de taxa da Apple. Além disso, acho que faz todo sentido evitar um tipo de dados personalizado para os resultados retornados por essa API REST personalizada e, portanto, gostaria de usar os dados retornados para gerarCLPlacemark
s. No entanto, a documentação afirma queCLPlacemark
propriedades comolocation, locality, administrativeArea
etc sãoread-only
. Eu, portanto, criei uma subclasse deCLPlacemark
sintetizando as propriedades necessárias em variáveis privadas que posso acessar, ou seja:
// 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
Testando este código com um teste de unidade que analisa dados de um arquivo JSON e chama meuinitWithLocation: locality: administrativeArea: country:
O método com os dados resulta em umEXC BAD ACCESS (code=1)
no final do teste (no fechamento}
do método de teste) com a variável de marcador apontando paranil
embora umNSLog(@"placemark: %@", customPlacemark);
gera os valores corretos. Além disso, percorrer a linha de teste por linha mostra aCustomPlacemark
trabalhando (ou seja, apontando para um objeto preenchido corretamente) até chegar ao final do teste. Para mim, isso indica que algo com a desalocação do meuCustomPlacemark
dá errado - mas o que exatamente?
Qualquer ajuda é muito apreciada!