我有一个带有NSTableView的窗口,一个复选框和一个标签。这三个项目连接到一个名为PrefWindowController的NSWindowController子类:
@interface PrefWindowController : NSWindowController
//Members
@property (weak) IBOutlet NSButton *enabledCheckbox;
@property (weak) IBOutlet NSTextField *powerConnectedLabel;
@property (weak) IBOutlet NSTableView *ethernetAdaptorsTable;
@property (strong) EthernetAdaptorsDataSource* currentDatasource;
//Methods
-(IBAction)updateTable;
//...
//Overridden Methods
-(void) windowDidLoad;
@end
我覆盖了windowDidLoad并使用它在NSTableView上设置DataSource:
-(void)windowDidLoad
{
[super windowDidLoad];
[self updateTable:nil];
}
-(void) updateTable:(NSNotification*)notification
{
self.currentDatasource = [[EthernetAdaptorsDataSource alloc] initWithData: [[AppState getState] ethernetAdaptors]];
[self.ethernetAdaptorsTable setDataSource:self.currentDatasource];
[self.ethernetAdaptorsTable reloadData];
}
我有一个计时器,最终会触发重新加载数据。它有点复杂,但特别是定时器调用一个函数(checkForUpdates),如果发生更新,它会发送一个Notification,听取:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateTable:)
name:@"ethernetStatusChanged"
object:nil];
问题是当通知触发时,我们进入updateTable,enabledCheckbox是一个有效指针,powerConnectedLabel是一个有效指针,但 ethernetAdaptorsTable是nil 。当我们通过windowDidLoad调用updateTable时,它并没有结果,所以我知道它有一个合适的参考插座' (至少,我非常确定 - 我在"对象"在IB和"文件的所有者")之间有点混淆。但我不知道,虽然它会是零,但其他两个不会。
答案 0 :(得分:0)
而不是windowDidLoad使用awakeFromNib来做那个处理。我认为windowDidLoad在所有出口连接之前被调用。
答案 1 :(得分:0)
我遇到的问题基本上是我将一些东西连接到File的所有者,其他东西连接到NSObject,它本身就是与FileOwner相同的类。这个课程有两个实例漂浮在周围,而我正在不同的那些实例上结束。
我通过覆盖和破坏Init函数来调试它。我还提到了这个问题,它实际上存在同样的问题:Instance variables lose value after initWithNib and before IBAction in NSViewController