Я получаю ту же ошибку, что и вы:
An instance 0xa975400 of class xxxxxx was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:
<NSKeyValueObservationInfo 0xa980eb0> (
<NSKeyValueObservance 0xa980e70: Observer: 0xa94f8a0, Key path: coordinate, Options: <New: NO, Old: NO, Prior: YES> Context: 0x0, Property: 0xa980ef0>
Как указано здесь, это было вызвано тем, что я добавлял MKAnnotation с неверной координатой в MKMapView.
Мое решение состояло в том, чтобы создать функцию для проверки действительной координаты.
Место + MKAnnotation.m
Я создал категорию своего класса Place и
#import "Place.h"
#import <MapKit/MapKit.h>
@interface Place (MKAnnotation) <MKAnnotation>
- (BOOL)coordinateIsValid;
...
@end
Место + MKAnnotation.m
@implementation Place (MKAnnotation)
- (BOOL)coordinateIsValid
{
return CLLocationCoordinate2DIsValid(CLLocationCoordinate2DMake([self.latitude doubleValue],[self.longitude doubleValue]));
}
...
@end
Я добавляю аннотацию в свой ViewController только в том случае, если координата действительна.
if([p coordinateIsValid]) {
[self.mapView addAnnotation:p];
}