On Sep 11, 2015, at 20:20 , Alex Hall <mehg...@icloud.com> wrote:
> 
> Okay, the error I'm seeing (about [ViewController count]) is the table asking 
> for how big it should be.

Actually, that’s not it, though you can be excused for thinking so.

What’s wrong is that you tried to add way too many bindings, in particular to 
the array controller. The only binding needed is the content binding. The 
managedObjectContext binding must NOT be used, because this is not a Core Data 
data model (but it probably makes no difference because it’s referencing nil 
and so I expect the array controller just ignores it). The selectionIndexes and 
sortDescriptors CANNOT be used in the project as it stands, because your view 
controller does not have any corresponding properties to bind to. The ‘count’ 
here is asking for the models’ opinion of the number of selected rows, or the 
number of sort descriptors. It’s not easy to tell which. In order to use these 
bindings, the view controller would have to have properties with names that 
match the model keys. Remember that the model key is just a string. It can’t 
cause any properties or methods to exist — you have to do that part.

After fixing that, your app crashes with a different error, which is a kind of 
success because things got a lot further!

The later crash was because you bound the wrong thing (that is, the wrong 
“from” object) when trying to get hold of displayText. In the IB object 
hierarchy, you bound the thing called “Text Cell”, which is actually a 
prototype NSCell used for the column header. Normally you just treat is as part 
of IB’s implementation details and don’t modify it directly.

There’s a sub-hierarchy of 3 other things, called “Table Cell View” (which is a 
NSTableCellView, and it’s the prototype of the top level view for each cell), 
"Table View Cell” (which is your text field), and “Table View Cell” (yes, the 
same name, which is the NSCell that the NSTextField machinery uses and you 
similarly ignore in IB, in most cases).

So after deleting the incorrect “Text Cell” binding, your project runs, 
although the rows don’t show anything because the text field isn’t actually 
(wasn’t ever) bound to anything.

To complete this example — to get the text from Tweet.displayText to be shown 
in the table — you have to hook up the the text field (the one called “Table 
Cell View”, but not the NSCell of that name) via binding or whatever so that it 
resolves its value through the Table Cell View’s objectValue. That’s the 
“advanced” part, and I don’t remember exactly what to do because I never use 
table view content bindings any more. If you carefully follow through the 
example of table content bindings the table view programming guide, you should 
be able to figure this out, but you’re on your own. I don’t feel obliged to 
make your self-inflicted pain my self-inflicted pain. :)

> That makes way more sense--I was under the impression that the array 
> controller was asking on the table's behalf, that's why I expected it to use 
> countOfTweets().

As it turned out, the array controller wasn’t asking about the tweets at all. 
But if it was, it would use “count" because it’s an *array* controller, and the 
standard behavior that returns the count is “count”. Note that the table view 
doesn’t even know the name of the relevant property, because it’s hidden on the 
“other” side of the array controller, not to mention buried inside a binding. 
It’s “count” all the way down the line.

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to