There's an explicit note in the NSTabelView documentation:
Important: It’s possible that your data source methods for populating the table view may be called before awakeFromNib is called if the data source is specified in Interface Builder. You should defend against this by having the data source’s numberOfRowsInTableView: method return 0 for the number of rows when the data source has not yet been configured. In awakeFromNib, when the data source is initialized you should always call reloadData on the table view.