我有一个带有NSTableView,复选框和标签的窗口。这三个项目都连接到一个NSWindowController子类我命名PrefWindowController:NSTableView在窗口加载后为零
@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的数据源:
-(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)并在出现更新时,它发出了一个通知,这是听了:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateTable:)
name:@"ethernetStatusChanged"
object:nil];
的问题是通知火灾时,我们进入updateTable,enabledCheckbox是一个有效的指针,powerConnectedLabel是一个有效的指针,但ethernetAdaptorsTable是零。当我们通过windowDidLoad调用updateTable时,并不是零,所以我知道它有一个合适的'Reference Outlet'(至少,我敢肯定 - 我对IB中的“Object”的区别和“文件所有者”)。但是我不知道它会是零,但其他两个不会。
我想我有一个想法是怎么回事。你能否用这些元素添加IB的屏幕截图? – Dumoko
这是你需要的吗? http://imgur.com/uLwfczd –
我看到tableView就像View层次结构中的一个单独的节点。这意味着,因为tableView充当一种根,它应该自己处理它自己的内存,所以请尝试将weak设置为tableView的强引用。 – Dumoko