Il problemaPerché il mio IBOutlet viene rilasciato sotto ARC?
Un IBOutlet viene rilasciato prima ho la possibilità di usarla.
What I Want
Voglio accedere a un controller di navigazione dalla mia app delegato in modo da poter ricaricare una vista tabella.
mio Setup
ho:
- Un Main.xib che è impostato come il mio principale interfaccia nelle impostazioni di destinazione
- Un IBOutlet al controller di navigazione come un Ivar sulla mia app delegato
- Questo IBOutlet è stato collegato al controller di navigazione corretto in Main.xib
- Il delegato dell'app è istanziato in th e XI ter ma non impostati come proprietario del file
sto usando ARC, Xcode 4.3.2 e iOS5.1
quello che ho provato
- Modifica destinazione di distribuzione
- Mettere un punto di interruzione su dealloc per il controller di navigazione, delegato app - non vengono mai chiamati
- Leggere tutto ciò che riesco a trovare su ARC e IBOutlets - niente sembra cont radict quello che sto facendo
- Creazione di un nuovo progetto con solo le classi minimi richiesti - vedo esattamente lo stesso problema
Codice
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
UPDATE
ho devo fare qualcosa di veramente stupido qui. Anche un progetto incredibilmente semplice mostra ancora questo problema. Vedi il link qui sotto.
Download a simple test project that shows the problem.
Molto MOLTO buon esempio di una domanda –