我有一個帶有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