Extending CLPlacemark führt zu EXC BAD ACCESS
Obwohl gibt es eine ähnliche Frage gefundenHie es gibt keine Antwort, zumindest nicht für das allgemeine Problem.
Mein Problem ist: SeitCoreLocation
geocoding ist ratenbegrenzt und der (Web-) Dienst, für den ich eine App entwickle, bietet einen eigenen Fallback-Geocodierungsdienst. Ich möchte diesen benutzerdefinierten Geocodierungsdienst verwenden, falls ich das Ratenlimit von Apple erreiche. Des Weiteren halte ich es für absolut sinnvoll, einen benutzerdefinierten Datentyp für die von dieser benutzerdefinierten REST-API zurückgegebenen Ergebnisse zu vermeiden und möchte daher die zurückgegebenen Daten verwenden, um @ zu generiereCLPlacemark
s. Die Dokumentation besagt jedoch, dassCLPlacemark
Eigenschaften wielocation, locality, administrativeArea
etc. sindread-only
. Ich habe daher eine Unterklasse von @ erstellCLPlacemark
Synthetisieren der benötigten Eigenschaften auf private Variablen, auf die ich zugreifen kann, d.
// 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
Testet diesen Code mit einem Komponententest, der Daten aus einer JSON-Datei analysiert und my @ aufrufinitWithLocation: locality: administrativeArea: country:
-Methode mit den Daten ergibt einEXC BAD ACCESS (code=1)
am Ende des Tests (am Schluss}
der Testmethode) mit der Ortsmarkenvariablen aufnil
obwohl a priorNSLog(@"placemark: %@", customPlacemark);
gibt die korrekten Werte aus. Darüber hinaus zeigt das zeilenweise Durchlaufen des Tests dasCustomPlacemark
arbeiten (d. h. auf ein ordnungsgemäß gefülltes Objekt zeigen), bis das Ende des Tests erreicht ist. Für mich bedeutet dies, dass etwas mit der Freigabe meinesCustomPlacemark
geht schief - aber was genau?
Jede Hilfe wird sehr geschätzt!