问题
一个 IBOutlet 在我有机会使用它之前就发布了。
我想要的是
我想从我的应用程序委托访问导航控制器,以便重新加载表格视图。
我的设置
我有:
- 在目标设置中设置为主界面的 Main.xib
- 导航控制器的 IBOutlet 作为我的应用程序委托上的 ivar
- 此 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
更新
我必须在这里做一些非常愚蠢的事情。即使是一个非常简单的项目仍然会显示这个问题。请参阅下面的链接。