6
Estoy bastante confundido acerca de cómo cambiar una variable de instancia dentro de un bloque.Cambiar una variable de instancia en un bloque
El archivo de interfaz (.h):
@interface TPFavoritesViewController : UIViewController {
bool refreshing;
}
La aplicación:
__weak TPFavoritesViewController *temp_self = self;
refreshing = NO;
[myTableView addPullToRefreshWithActionHandler:^{
refreshing = YES;
[temp_self refresh];
}];
Como se puede adivinar, consigo un ciclo de retener la advertencia cuando trato de cambiar el interior de Ivar refrescante el bloque. ¿Cómo haría esto sin obtener un error?
No se compila solo con este código. Me aparece el siguiente error: No se permite la desreferencia de __weak debido a un posible valor nulo causado por una condición de carrera, asígnelo primero a una variable fuerte. Creo que lo hice funcionar agregando esto: __truerte TprideListView * strong_self = temp_self; strong_self-> refreshing = YES; –
cuidado; Desreferenciar un puntero débil puede provocar bloqueos. Es mejor hacer un puntero fuerte que el débil dentro del bloque, comprobar si es nulo y usarlo. –
@KeiranPaster - disculpas Me perdí la segunda advertencia; si su código mantiene a raya las advertencias, está funcionando * siempre que * su objeto se quede (es decir, 'self 'es válido); el código no trata la posibilidad de un valor 'nil'. Supongo que sabes que lo es, si no lo haces ... – CRD