问题
IBOutlet在我有机会使用之前就已发布。
我想要什么
我想从我的app委托访问导航控制器,以便重新加载表格视图。
我的设置
我有:
我使用ARC,Xcode 4.3.2和iOS5.1
我尝试过的事情
代码
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
更新
我必须在这里做一些非常愚蠢的事情。即使是一个非常简单的项目仍然显示这个问题。见下面的链接。
答案 0 :(得分:2)
是您将Interface Builder设置为KPBrowseExpensesNavigationController
类型的出口吗?
如果不是,则不会在您的nib和ViewController之间创建连接。
您应该在Identity Inspector中将其自定义类设置为KPBrowseExpensesNavigationController
答案 1 :(得分:2)
在Window nib中,将FilesOwner类设置为UIApplication,然后将其从Outlets指向委托给AppDelegate对象。这是您的项目示例中的错误。
答案 2 :(得分:1)
我不确定你为什么要把它宣布为财产&amp;非财产。我应该这样做:
@interface KPAppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) IBOutlet KPBrowseExpensesNavigationController *nc;
在您的实施中:
@implementation KPAppDelegate
@synthesize nc = _nc; // So you don't accidentally use nc
...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 = [[**self.nc** viewControllers] objectAtIndex:0];
[[tvc tableView] reloadData];
}
@end
希望这有帮助!
答案 3 :(得分:1)
我没看到你分配导航控制器的位置。只是声明属性不会为它分配任何值,所以它将是零。在app delegate中的-didFinishLaunchingWithOptions
中,设置alloc / init语句。其他一切看起来都不错。
KPBrowseExpensesNavigationController *nc = [[KPBrowseExpensesNavigationController alloc] init];
如果您有自定义初始化,也可以使用它,但只需确保在尝试使用它之前进行设置。