El problema¿Por qué mi IBOutlet se lanza bajo ARC?
Un IBOutlet se libera antes de que tenga la oportunidad de usarlo.
lo que quiero
Quiero tener acceso a un controlador de navegación desde mi aplicación delegado para que pueda volver a cargar una vista de tabla.
mi configuración
tengo:
- Un Main.xib que se ha configurado como mi interfaz principal en la configuración de destino
- Un IBOutlet al controlador de navegación como Ivar en mi aplicación delegado
- Este IBOutlet conectado al controlador de navegación correcto en Main.xib
- App Delegate se crea una instancia en th e xib pero no establecen como del propietario del archivo
estoy usando ARC, Xcode 4.3.2 y iOS5.1
lo que he tratado
- Cambio de destino del despliegue de
- Poner un punto de ruptura en dealloc para el controlador de navegación, delegado de la aplicación - nunca se llaman
- Leer todo lo que puedo encontrar en ARC y IBOutlet - nada parece cont radict lo que estoy haciendo
- Creación de un nuevo proyecto, con sólo las clases mínimas requeridas - Veo exactamente el mismo problema Código
KPAppDelegate.h
@interface KPAppDelegate : UIResponder <UIApplicationDelegate> {
IBOutlet KPBrowseExpensesNavigationController *nc;
}
@property (strong) IBOutlet KPBrowseExpensesNavigationController *nc;
KPAppDelegate.m
@implementation KPAppDelegate
@synthesize nc;
-(void)setNc:(KPBrowseExpensesNavigationController *)nc_ {
nc = nc_; // This gets called on view load and nc gets set.
}
...snip...
// This is called about 5 seconds after app startup
-(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {
// By the time we get here, nc is nil.
UITableViewController *tvc = [[nc viewControllers] objectAtIndex:0];
[[tvc tableView] reloadData];
}
@end
ACTUALIZACIÓN
I debo estar haciendo algo realmente tonto aquí. Incluso un proyecto increíblemente simple todavía muestra este problema. Ver el enlace a continuación.
Download a simple test project that shows the problem.
Muy MUY buen ejemplo de una pregunta –