¿Por qué mi aplicación se bloqueó cuando se asignó a sí mismo a __destaja local en ARC?

Crashlytics informó este crash:

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 .... 

El código en cuestión:

 -(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]; }); } } 

Necesito ayuda para entender por qué se estrelló y qué puedo hacer para evitarlo en el futuro. Esta es la primera vez que he visto algo como este crash, así que me pregunto si es una casualidad.

Asegúrese de que, en todos los casos, su CloudSyncButton se haya alejado de observar otros objects en su método dealloc. Parece que este post se envía después de que su button ha sido desasignado.

    Intereting Posts