I've just redownloaded my code and it all seems pretty standard.
There is a NSMutableArray (not NSArray as you can't add objects to that) to store the filenames (in the Controller class). There is an instance of this class in the main nib.
There is a NSArrayController (in the nib) to manage this array which is bound to the NSMutableArray in the Controller controller class. So this binding links the array controller to the actual data storage.
There is a NSTableView with the Value of the NSTableViewColumn bound to the NSArrayController. So this binding links the content of that column (note we bind the contents of each column separately: you do not bind the values for the whole table) to the content of the NSArrayController, which is the NSMutableArray in our Controller class.
This is more-or-less the layout of the most basic table binding example you can get. I created the example in OSX 10.4, so using IB 2.5...
If you are struggling with NSTableView bindings you could read
this tutorial