Objective-c is learn-able; Cocoa is learn-able; I find Interface Builder and its descendant Xcode 4 to be completely inscrutable! There is no text (as the equivalent of C or Obj-c source code) to refer to. All descriptions are all "drag here; connect that; Ctl drag there" and I remain lost....
I have been trying to go through the various Apple examples of key technologies. I have been going through Cocoa Bindings and the example file in the example NSTableViewBinding in Apple developer. To try and understand it, I have been trying to replicate it.
Referring now to the comments at the top of the awakeFromNib
method in the file MyWindowController.m How do I make these connections in Xcode 4???
The Object
called TableArray
does not exist either in the Object library or in the source code; where does that come from?
The Referencing Bindings
on the right; how are these created?
The various Key / Value pairs mentioned in the top of the awakeFromNib
method; how are these created?
I know that Xcode 4 is supposed to be a more straightforward improvement, but I am very confused by the replacement for IB. All the IB materials on the web refer to the completely different earlier versions, so I cannot find much in the way of help.
Follow-up
I did succeed in figuring out Cocoa Bindings in Xcode 4. I was able to duplicate the functionality of the example program in a few lines of code.
Here are the issues that took me a while to figure out:
TableArray
is the Array Controller Object
dragged over from the Object Library to the Objects list in the XIB and then renamed. (Note to Apple: a base object class would be nice in the right-click HUD view)
Stephen Poletto's answer was an invaluable guide to connecting it all.
It was not immediately apparent to me how the connection interface works in the right-click HUD:
The storage array myContentArray
is implicit in the instantiation of Array Controller Object
Click and drag from the HUD of the TableArray to the AppDelegate's definition in the .h file to create the connection there.
To establish the bindings described in the awakeFromNib comments:
The referencing bindings section of the connections inspector shows you all the bindings that have already been established through the selected controller. So if you select the TableArray and navigate to the connections inspector, you'll now see "arrangedObjects.firstName" -> Value, Table Column - First Name. This is showing you the binding you just established above.
Before diving into a more advanced topic like Cocoa Bindings, it might be worthwhile to get comfortable working with Interface Builder. Use it to create IBOutlet and IBAction connections, both natively within IB and between IB and source code. Get used to using the inspectors to modify attributes of the UI objects, etc. Once you're comfortable with the general workflow of IB, tackling bindings will be easier. Here's a guide to help.
The by-now-integrated Interface builder part of Xcode 4 is not that different from the old Interface Builder, as far as the underlying concepts are concerned.
Download XCode 3 which is still available in the Apple website, and follow the tutorials available online.
Or somebody more helpful than me in SO might write a nice tutorial using Xcode 4...
That said, let me try explaining you a few things. (But I really do recommend using Xcode 3 for you at this point. I'm not saying Xcode 3 is intrinsically better; I'm just saying Xcode 3 has more tutorials so that you can get the concept more easily, which can then be used with Xcode 4.)
A nib/xib file contains archived objects in it. In the Interface Builder (whether stand-alone or unified into Xcode) creates the nib/xib file by creating live objects, which are then freeze-dried into archived objects when the file is saved. TableArray
is an instance created inside the nib file. You can drag a generic object from the object library to a nib and change its class to anything you want. That's how the object is created.
You don't create referencing bindings. Binding has a direction, from an object A to another object B. You set bindings on the side of A (in this case, an NSTableColumn
). Referencing bindings just show these info on the side of B. So, select the table view columns in the IB and set the bindings there.
That's done on the binding pane of the NSTableColumn
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With