Das ProblemWarum wird mein IBOutlet unter ARC veröffentlicht?
Ein IBOutlet freigegeben wird, bevor ich eine Chance haben, es zu benutzen.
Was ich
Wollen Ich will einen Navigation-Controller von meinem AppDelegate zuzugreifen, so kann ich eine Tabellenansicht neu zu laden.
Mein Setup
ich habe:
- A Main.xib, die als meine wichtigste Schnittstelle in Zielsystemeinstellungen
- Ein IBOutlet zum Navigationscontroller als Ivar auf meinem AppDelegate-Set
- Dieses IBOutlet wurde an den richtigen Navigationscontroller in Main.xib angeschlossen.
- App Delegate wird in th instanziiert e xib aber nicht als Datei-Besitzer setzen
Ich bin mit ARC, Xcode 4.3.2 und iOS5.1
Was ich Versuchte
- Ändern Implementierungsziel
- Setzen Sie einen Breakpoint auf Dealloc für den Navigationscontroller, App-Delegate - sie werden nie aufgerufen
- Alles lesen, was ich auf ARC und IBOutlets finden kann - nichts scheint zu cont radict, was ich tue
- mit einem frischen Projekt anlegen erforderlich, um eine nur den Mindest Klassen - ich sehe genau das gleiche Problem
-Code
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
ich muss etwas wirklich dumm hier tun. Selbst ein unglaublich einfaches Projekt zeigt dieses Problem noch. Siehe Link unten.
Download a simple test project that shows the problem.
Sehr sehr gutes Beispiel für eine Frage –