问题
在我有机会使用它之前,IBOutlet 就被释放了。
希望实现的功能
我想从我的应用程序委托中访问导航控制器,以便我可以重新加载表视图。
我的设置
我有:
- 一个 Main.xib,它在目标设置中设置为我的主要界面
- 将导航控制器作为 app 委托的 ivar 的 IBOutlet
- 此 IBOutlet 钩接到 Main.xib 中正确的导航控制器
- 应用程序委托在 xib 中被实例化,但未设置为文件所有者
我正在使用 ARC、Xcode 4.3.2 和 iOS5.1
我尝试过的
- 更改部署目标
- 在导航控制器、应用程序委托的 dealloc 上设置断点,但它们从未被调用
- 阅读我能找到的有关 ARC 和 IBOutlet 的所有内容 - 没有任何东西似乎与我所做的相矛盾
- 创建一个只包含所需最小类的全新项目 - 我看到完全相同的问题
代码
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
更新
我肯定在这里做了什么非常愚蠢的事情。即使是一个非常简单的项目仍然会出现这个问题。请参见下面的链接。