2016-05-02 10 views
0

クラッシュ・ミックスからクラッシュしました。おそらくそれは弱い自己と関連していたでしょう。クラッシュを理解できません。

あなたがクラッシュし、コードの行を見ることができますリリースされたバージョンのための
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 __(自己)weakSelf =自己; – Voloda2

+0

クラッシュについてはわかりませんが、ここでは「__weak Self」を使用する必要はありません。これは、保持サイクルがないためです。あなたのModuleViewはブロックへの強いポインタを持っていないので、 'weakSelf'ではなく' self'を安全に渡すことができます。 – dirkgroten

答えて

0

、Xcodeで

:ウィンドウ - > Organizer->は

をクラッシュし、アプリを選択し、左パネルのバージョン

try "例外ブレークポイント"

例外ブレークポイントが自動的に行にブレークポイントを追加クラッシュを引き起こした、とあなたは例外ブレークポイントを追加するために、問題

を見ることができます:

Xcodeで: トップメニューを - >デバッグ - >ブレークポイント - >例外ブレークポイントを作成します。 ...

を実行してもう一度実行してください

関連する問題