2016-05-02 53 views
0

我從crashlytics得到了一個崩潰。可能它與弱自我聯繫在一起。我無法理解崩潰。

Crashed: com.apple.main-thread 
EXC_BREAKPOINT 0x000000000defe 

0 libobjc.A.dylib    0x224aea44 _objc_trap() 
1 libobjc.A.dylib    0x224aeaa9 _objc_inform + 70 
2 libobjc.A.dylib    0x224c8413 weak_register_no_lock + 210 
3 libobjc.A.dylib    0x224c8993 objc_initWeak + 130 
4 GPS_______appLite    0xd77b1 -[ModuleView observeValueForKeyPath:ofObject:change:context:] (ModuleView.m:232) 
5 GPS_______appLite    0xd9287 -[ModuleSpeedometerView observeValueForKeyPath:ofObject:change:context:] (ModuleSpeedometerView.m:198) 
6 Foundation      0x2349aa91 NSKVONotify + 52 
7 Foundation      0x23479bef NSKeyValueNotifyObserver + 286 
8 Foundation      0x23479847 NSKeyValueDidChange + 346 
9 Foundation      0x23466599 -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] + 96 
10 GPS_______appLite    0x12c393 -[GPSTracker private_updateCurrentStatisticsWithLocation:] (GPSTracker.mm:1887) 
11 GPS_______appLite    0x12c1b9 -[GPSTracker private_addLocationToHistory:] (GPSTracker.mm:1870) 
12 GPS_______appLite    0x12c6af -[GPSTracker private_processNewLocation:fromManager:] (GPSTracker.mm:1938) 
13 GPS_______appLite    0x12c88b -[GPSTracker locationManager:didUpdateLocations:] (GPSTracker.mm:1953) 
14 CoreLocation     0x28c5c493 (null) + 25830 
15 CoreLocation     0x28c5765b (null) + 5806 
16 CoreLocation     0x28c50725 (null) + 988 
17 CoreFoundation     0x22cd5d91 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 
18 CoreFoundation     0x22cd584d __CFRunLoopDoBlocks + 216 
19 CoreFoundation     0x22cd41bf __CFRunLoopRun + 1806 
20 CoreFoundation     0x22c232e9 CFRunLoopRunSpecific + 520 
21 CoreFoundation     0x22c230d5 CFRunLoopRunInMode + 108 
22 GraphicsServices    0x24213ac9 GSEventRunModal + 160 
23 UIKit       0x272e80b9 UIApplicationMain + 144 
24 GPS_______appLite    0x10adc7 main (main.m:15) 
25 libdispatch.dylib    0x228cb873 (Missing) 

和代碼

//ModuleView class 
- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context 
{ 
if ([object isKindOfClass:[GPSTracker class]]) 
{ 
    __weak GPSTracker *tracker = (GPSTracker *)object; 
    __weak __typeof__(self) weakSelf = self; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     if ([keyPath isEqualToString:NSStringFromSelector(@selector(trackerMode))]) 
     { 
      [weakSelf trackerStateChanged]; 
     } 
     else if ([keyPath isEqualToString:NSStringFromSelector(@selector(currentStatistics))]) 
     { 
      id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; 
      if (!oldValue 
       || [oldValue isKindOfClass:[NSNull class]]) 
      { 
       // If statistics instance has been initialized 
       if (!weakSelf.shouldIgnoreUpdates) 
       { 
        [tracker.currentStatistics.time addUniqueObserver:weakSelf 
                  forKeyPath:NSStringFromSelector(@selector(elapsed)) 
                   options:NSKeyValueObservingOptionNew]; 
       } 
      } 

      [weakSelf trackerUpdate]; 
     } 
    }); 
} 
else if ([object isKindOfClass:[GPSTrackerTimeStatistics class]]) 
{ 
    __weak __typeof__(self) weakSelf = self; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [weakSelf timerUpdate]; 
    }); 
} 
} 
+0

從ModuleView.m指出哪行代碼是232行。 – rmaddy

+0

rmaddy,__weak __typeof __(self)weakSelf = self; – Voloda2

+0

我不知道這次崩潰,但您不需要在這裏使用'__weak Self',因爲您沒有保留週期。您的ModuleView沒有強大的指向塊的指針,所以您可以安全地在塊中傳遞'self'而不是'weakSelf'。 – dirkgroten

回答

0

爲發佈的版本,你可以看到死機的代碼行,

在Xcode

:窗口 - > Organizer->崩潰

,並選擇應用程序,版本來自左側面板

嘗試「異常斷點」

異常斷點自動添加斷點線已經引起死機,你可以看到

增加異常斷點問題:

在Xcode

: 頂部菜單 - >調試 - >斷點 - >創建異常斷點...

並再次運行