У меня есть подкласс NSManagedObject, который соответствует протоколу MKAnnotation, и у него есть свойства NSNumber для широты и долготы.
Когда я сам изменяю любые координаты, я использую setCoordinate: и обновляю свойства широты и долготы внутриРеализация setCoordinate :.Используя этот метод, представление карты обновляет аннотации.Однако, когда я объединяю изменения с другим NSManagedObjectContext через mergeChangesFromContextDidSaveNotification :, setCoordinate: не используется, потому что свойства широты и долготы явно изменены.Это предотвращает любые уведомления KVO об изменении координат.
Я пытался получить представление карты, чтобы понять, что координата зависит от свойств широты и долготы с этим кодом:
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if ([@"coordinate" isEqualToString:key]) {
NSSet *affectingKeys = [NSSet setWithObjects:@"latitude", @"longitude", nil];
keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys];
}
return keyPaths;
}
Однако этот код вызывает это падение:
Завершение приложения из-за необработанного исключения «NSRangeException», причина: «Невозможно удалить наблюдателя для ключевого пути« координата », поскольку он не зарегистрирован в качестве наблюдателя.'
Любые идеи о том, как предотвратить этот сбой, или альтернативные методы получения координатного уведомления KVO, отправляемого при изменении широты или долготы?Спасибо, что заглянули.