Исключение MapKit: невозможно удалить наблюдателя для ключевого пути "title" - PullRequest
7 голосов
/ 22 февраля 2011

У меня довольно много таких сбоев. В моем коде я не использую KVO для своих объектов MKAnnotation, которые могли бы объяснить это исключение. Так что для меня это похоже на ошибку iOS.

Кто-нибудь еще испытывал подобные сбои?

*** Terminating app due to uncaught exception 'NSRangeException', reason: 'Cannot remove an observer  for the key path "title" from  because it is not registered as an observer.'

Thread 0 Crashed:
0   libSystem.B.dylib                   0x000792d4 __kill + 8
1   libSystem.B.dylib                   0x000792bd raise + 17
2   WhereTo                             0x000a430d uncaught_exception_handler (PLCrashReporter.m:137)
3   CoreFoundation                      0x000a0adf __handleUncaughtException + 239
4   libobjc.A.dylib                     0x00006593 _objc_terminate + 103
5   libstdc++.6.dylib                   0x00042df9 __cxxabiv1::__terminate(void (*)()) + 53
6   libstdc++.6.dylib                   0x00042e4d std::terminate() + 17
7   libstdc++.6.dylib                   0x00042f1d __cxa_throw + 85
8   libobjc.A.dylib                     0x000054cb objc_exception_throw + 71
9   CoreFoundation                      0x000a07c9 +[NSException raise:format:arguments:] + 69
10  CoreFoundation                      0x000a0803 +[NSException raise:format:] + 35
11  Foundation                          0x00031b4d -[NSObject(NSKeyValueObserverRegistration) _removeObserver:forProperty:] + 545
12  Foundation                          0x000318a1 -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:] + 121
13  MapKit                              0x00024e75 -[MKAnnotationContainerView _unregisterObserverForBubbleAnnotation:] + 133
14  MapKit                              0x0001fd29 -[MKAnnotationContainerView setBubbleAnnotationView:] + 73
15  MapKit                              0x0001f4e3 -[MKAnnotationContainerView _showBubbleForAnnotationView:bounce:scrollToFit:userInitiated:avoid:] + 211
16  MapKit                              0x0001f235 -[MKAnnotationContainerView _setSelectedAnnotationView:bounce:pressed:scrollToFit:userInitiated:avoid:] + 357
17  MapKit                              0x0001f0bf -[MKAnnotationContainerView _setSelectedAnnotationView:bounce:pressed:scrollToFit:userInitiated:] + 83
18  MapKit                              0x000248ab -[MKMapView handleTap:] + 195
19  CoreFoundation                      0x0003ebbf -[NSObject(NSObject) performSelector:withObject:] + 23
20  UIKit                               0x0009a3d3 -[UIGestureRecognizer _updateGestureWithEvent:] + 575
21  UIKit                               0x0009a18b -[UIGestureRecognizer _delayedUpdateGesture] + 23
22  UIKit                               0x000017b1 _UIGestureRecognizerUpdateObserver + 437
23  CoreFoundation                      0x00030c59 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 17
24  CoreFoundation                      0x00030acd __CFRunLoopDoObservers + 413
25  CoreFoundation                      0x000280cb __CFRunLoopRun + 855
26  CoreFoundation                      0x00027c87 CFRunLoopRunSpecific + 231
27  CoreFoundation                      0x00027b8f CFRunLoopRunInMode + 59
28  GraphicsServices                    0x000044ab GSEventRunModal + 115
29  GraphicsServices                    0x00004557 GSEventRun + 63
30  UIKit                               0x00037329 -[UIApplication _run] + 413
31  UIKit                               0x00034e93 UIApplicationMain + 671
32  WhereTo                             0x00003475 main (main.m:14)

Ответы [ 5 ]

3 голосов
/ 16 августа 2011

Оказывается, я написал в свойство из фоновых потоков, что не разрешено.Если я установлю его только из основного потока, проблема, похоже, исчезнет.

3 голосов
/ 12 мая 2011

У меня был похожий сбой при запуске MapKit в OS 4.x. Под «подобным» я подразумеваю, что это было связано с КВО и наблюдателями, но я не помню деталей.

Проблема была: У меня был класс, реализующий протокол MKAnnotation. Но в этом классе я обращался к свойству координат без использования KVO (напрямую через соответствующий ivar):
_coordinate = ....
вместо
self.coordinate = ...

Похоже, что Mapkit теперь (начиная с OS 4) полагается на уведомление KVO для контроля положения аннотаций.

2 голосов
/ 03 января 2013

для дальнейшего использования;Я получил точно такую ​​же ошибку, но в моем случае она была вызвана попыткой программно выбрать аннотацию, которая еще не была добавлена ​​в просмотр карты.

0 голосов
/ 11 марта 2016

Я использую то же самое в двух MKMapView, и исключение выдается при вызове removeAnnotations: из второй карты, это исправление проблемы try-catch.

@implementation MyAnnotation //<MKAnnotation>
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath
{
    @try
    {
        [super removeObserver:observer forKeyPath:keyPath];
    }
    @catch(...)
    {

    }
}
@end
0 голосов
/ 13 апреля 2012

У меня была похожая проблема, но свойство get было определенной функцией, но не было setter.Протокол MKAnnotation требует свойства (получатель и установщик).

...