自更新至xcode6 iOS8後,我發生了一次崩潰。日誌爲「 2014-09-28 14:53:34.069 ViewDemo [35448:3262351] *因未捕獲的異常'NSInternalInconsistencyException'而終止應用程序,原因:'RedView類的實例0x7f9750c1c410被釋放,而鍵值觀察者仍然。它註冊現有的觀測信息:( 語境:爲0x0,物業:0x7f9750c1b910> )」 *第一擲調用堆棧: (關於addObserver的ios8崩潰:
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和子視圖的關係。當superview dealloc時,子視圖不會先釋放。
有沒有人對此有興趣?
你應該從''dealloc'方法中的RedView中刪除觀察者。 – arturdev 2014-09-28 08:12:18
有類似的問題,嘗試在添加和刪除觀察者時記錄對象哈希值。你可以添加一個觀察者兩次,只刪除一次(甚至可能不能刪除兩次) – NikkyD 2014-10-02 14:39:49
你在哪裏添加/刪除觀察者? (即在代碼中的位置)。 – 2016-01-06 17:42:31