关于addObserver的ios8崩溃:

时间:2014-09-28 07:21:20

标签: ios8 key-value-observing

自从更新到xcode6 iOS8后发生了崩溃。日志是" 2014-09-28 14:53:34.069 ViewDemo [35448:3262351] *由于未捕获的异常而终止应用程序' NSInternalInconsistencyException',原因:'类RedView的实例0x7f9750c1c410已取消分配关键价值观察员仍在注册。目前的观察资料:(  上下文:0x0,属性:0x7f9750c1b910> )' * 第一次抛出调用堆栈: (

0   CoreFoundation                      0x00000001022e93f5 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x0000000101f82bb7 objc_exception_throw + 45
2   CoreFoundation                      0x00000001022e932d +[NSException raise:format:] + 205
3   Foundation                          0x0000000101b65af2 NSKVODeallocate + 317
4   UIKit                               0x000000010273fc97 -[UIView(Hierarchy) removeFromSuperview] + 633
5   UIKit                               0x0000000102733d19 -[UIView dealloc] + 404
6   libobjc.A.dylib                     0x0000000101f978cd _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 591
7   CoreFoundation                      0x00000001021e0346 _CFAutoreleasePoolPop + 22
8   CoreFoundation                      0x0000000102214473 __CFRunLoopRun + 2051
9   CoreFoundation                      0x0000000102213a06 CFRunLoopRunSpecific + 470
10  GraphicsServices                    0x00000001058b19f0 GSEventRunModal + 161
11  UIKit                               0x00000001026d5550 UIApplicationMain + 1282
12  ViewDemo                            0x0000000101a53657 main + 103
13  libdyld.dylib                       0x0000000104861145 start + 1

) libc ++ abi.dylib:以NSException类型的未捕获异常终止

"

这是我从my demo复制的日志。 看起来addObserver动作打破了关于superview和subviews的关系。当超级视图dealloc时子视图没有首先释放。

有没有人有这方面的想法?

1 个答案:

答案 0 :(得分:4)

当您销毁之前添加了观察者的对象时,通常会抛出此异常。

要解决此问题,您需要在调用销毁该对象的方法之前在同一对象上调用removeObserver:forKeyPath: