2014-04-04 135 views
0

我包含在我的iOS應用crashlytics,並通過企業的分佈式它。 Crashlytics不斷報道每天關於可達性的崩潰。我搜索了一下,但沒有得到什麼導致這次崩潰。崩潰在iOS應用

Fatal Exception: NSInvalidArgumentException 
-[__NSMallocBlock__ reachabilityChanged:]: unrecognized selector sent to instance 0x1c5cdfc0 


Thread : Fatal Exception: NSInvalidArgumentException 
0 CoreFoundation     0x316642a3 __exceptionPreprocess + 162 
1 libobjc.A.dylib    0x3252297f objc_exception_throw + 30 
2 CoreFoundation     0x31667e07 -[NSObject(NSObject) doesNotRecognizeSelector:] + 170 
3 CoreFoundation     0x31666531 ___forwarding___ + 392 
4 CoreFoundation     0x315bdf68 _CF_forwarding_prep_0 + 24 
5 CoreFoundation     0x315b5037 _CFXNotificationPost + 1426 
6 Foundation      0x3319ed91 -[NSNotificationCenter postNotificationName:object:userInfo:] + 72 
7 Foundation      0x331a2853 -[NSNotificationCenter postNotificationName:object:] + 30 
8         0x0005aee9 ReachabilityCallback (Reachability.m:94) 
9 SystemConfiguration   0x30f5f161 reachPerform + 924 
10 CoreFoundation     0x31639683 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14 
11 CoreFoundation     0x31638ee9 __CFRunLoopDoSources0 + 212 
12 CoreFoundation     0x31637cb7 __CFRunLoopRun + 646 
13 CoreFoundation     0x315aaebd CFRunLoopRunSpecific + 356 
14 CoreFoundation     0x315aad49 CFRunLoopRunInMode + 104 
15 GraphicsServices    0x393a82eb GSEventRunModal + 74 
16 UIKit       0x38e662f9 UIApplicationMain + 1120 
17       0x00076f2f main (main.m:16) 
18 libdyld.dylib     0x350bab20 start 
+1

似乎'reachabilityChanged'是在一類沒有提供這種方法調用。最可能的原因是你的類已經被釋放,但是你沒有將你的委託設置爲零? – gWiz

+0

@gWiz但我正在逐漸**「ARC禁止的dealloc的明確消息發送」 **當我打電話[supder的dealloc]裏面 - (空)的dealloc {}梅託德 – user3497411

+0

根據ARC可以提供dealloc'的'實現,但內但你不應該叫'[超級的dealloc]' – Abizern

回答

1

它看起來像你註冊正在被釋放可達性的觀察者但不是作爲一個觀察者消除自身在這之前發生。因此,當可達性通知稍後發佈時,它將被髮送到一個釋放的實例(即隨機存儲器位置),並且會發生崩潰。

所有觀察員(是否可達性或NSNotificationCenter任何其他通知),應自行拆除作爲觀察員,他們將被釋放之前。

+0

但我正在逐漸**「ARC禁止的dealloc的明確消息發送」 **當我打電話[supder的dealloc]裏面 - (空)的dealloc {}梅託德 – user3497411

+0

不要調用超...(編譯補充說你) – Wain

+0

我使用的,而不是**的dealloc()**我自己的terminateNotification()方法 - (無效){terminateNotification [internetReach stopNotifier] [[NSNotificationCenter defaultCenter] removeObserver:self]; } dealloc()和terminateNotification()之間有什麼區別嗎? – user3497411