仅当它是iOS 7且包含spcluster自定义映射( super 引脚映射)时,才出现此错误。为什么会发生此错误,我该如何解决?
*** Terminating app due to uncaught exception 'NSRangeException', reason: 'Cannot remove an observer <MKMapAnnotationManager 0xb355a00> for the key path "coordinate" from <Annotation 0x194c1470> because it is not registered as an observer.'
最佳答案
我有这个完全相同的问题。
您可以通过执行此操作来解决。
var observers: NSMutableSet! = NSMutableSet()
override func addObserver(observer: NSObject, forKeyPath keyPath: String, options: NSKeyValueObservingOptions, context: UnsafeMutablePointer) {
let observerId : String = "\(observer.hashValue)\(keyPath)"
self.observers.addObject(observerId)
super.addObserver(observer, forKeyPath: keyPath, options: options, context: context)
}
override func removeObserver(observer: NSObject, forKeyPath keyPath: String) {
let observerId : String = "\(observer.hashValue)\(keyPath)"
if (self.observers.containsObject(observerId)) {
self.observers.removeObject(observerId)
super.removeObserver(observer, forKeyPath: keyPath)
}
}
为了进行调试,如果在removeObserver()的else块内添加“NSLog”语句,您会发现MKMapView(或它的MKAnnotationManager)偶尔会随机决定删除对已被要求观察的MKAnnotation的观察。根据Apple自己的KVO文档,这是不可行的。
当它们跟踪(在每个注释的基础上)已为每个注释注册了哪些观察结果时,这些优先事项将“解决”该问题,从而使您可以拒绝取消观察已经被取消观察(或从未被观察到)的内容。首先观察到)。
这很麻烦,但是他们修复了我的动画崩溃。而且这样做没有太多的性能开销。
关于ios - 是什么导致引发此异常 "observer error"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20176890/