問題
IBOutlet は、使用する前にリリースされます。
私が欲しいもの
テーブル ビューをリロードできるように、アプリ デリゲートからナビゲーション コントローラーにアクセスしたいと考えています。
マイセットアップ
私は持っている:
- ターゲット設定でメイン インターフェイスとして設定されている Main.xib
- アプリ デリゲートの ivar としてのナビゲーション コントローラーへの IBOutlet
- この IBOutlet は、Main.xib の正しいナビゲーション コントローラーに接続されています。
- App Delegate は xib でインスタンス化されますが、ファイルの所有者として設定されません
ARC、Xcode 4.3.2、および iOS5.1 を使用しています
私が試したこと
- 配備先の変更
- ナビゲーション コントローラー、アプリ デリゲートの dealloc にブレーク ポイントを設定 - それらは呼び出されません
- ARC と IBOutlets で見つけたものをすべて読んでいます - 私がやっていることと矛盾するものは何もないようです
- 必要最小限のクラスだけで新しいプロジェクトを作成する - まったく同じ問題が発生します
コード
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
アップデート
私はここで本当にばかげたことをしているに違いない。信じられないほど単純なプロジェクトでさえ、この問題を示しています。以下のリンクを参照してください。