7

Crashlytics がこのクラッシュを報告しました:

0    libobjc.A.dylib     _objc_trap() + 18446744073709552000
1    libobjc.A.dylib     _objc_fatal + 71
2    libobjc.A.dylib     append_referrer_no_lock(weak_referrer_array_t*, objc_object**)
3    libobjc.A.dylib     objc_storeWeak + 120
4    MyApp               CloudSyncButton.m line 58 -[CloudSyncButton observeValueForKeyPath:ofObject:change:context:]
5    ....

問題のコード:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    CloudSyncButton* __weak weakSelf = self;  //<---crashed here
    if([keyPath isEqualToString:kCloudSyncingKVO]) {
        dispatch_async(dispatch_get_main_queue(), ^{
            CloudSyncButton* localSelf = weakSelf;
            [localSelf refreshCloudSyncIcon];
        });
    }
}

これがクラッシュした理由と、将来それを回避するために何ができるかを理解する助けが必要です. こんなクラッシュは初めて見たので、まぐれなのかな?

4

1 に答える 1

7

すべての場合において、CloudSyncButton がその dealloc メソッドで他のオブジェクトの監視から自身を削除したことを確認してください。ボタンの割り当てが解除された後に、このメッセージが送信されているようです。

于 2013-06-03T15:27:49.210 に答える