自从更新到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时子视图没有首先释放。
有没有人有这方面的想法?
答案 0 :(得分:4)
当您销毁之前添加了观察者的对象时,通常会抛出此异常。
要解决此问题,您需要在调用销毁该对象的方法之前在同一对象上调用removeObserver:forKeyPath:
。