two tables with two different Arrays

Following Craig’s tutorial - I can bind one table to an array successfully

I now have a new array that I want to bind to a second table - how do i tell one table to get its values from one place and the other table to get its values from another place?

Sorry for such a dumb question!

OLIx

Add another array controller.

Craig’s method shows using a datasource. Now I can’t see anyway of defining which things go into that data source.

There is this:

on tableView_objectValueForTableColumn_row_(aTableView, aColumn, aRow)
if theCountryArray’s |count|() is equal to 0 then return end

	set ident to aColumn's identifier
	
	set theRecord to theCountryArray's objectAtIndex_(aRow)
	set theValue to theRecord's objectForKey_(ident)
	return theValue
	
end tableView_objectValueForTableColumn_row_

on numberOfRowsInTableView_(aTableView)
	
	try
		if theCountryArray's |count|() is equal to null then
		else
			
			return theCountryArray's |count|()
		end if
		
	on error
		return 0
	end try
	
	
end numberOfRowsInTableView_

which are the proscribed methods for this type of access - but I don’t see how i can then make a new version of this to apply to a new array…

Arghhh

You can either do it with another class as datasource, or have your handlers check which table is involved by checking aTableView, and responding appropriately. IMO a second table is all the more reason to use array controllers and bindings rather than datasources.

I’m up for trying array controllers…

but i’ve not set one up - can you give me a heads up on where to look and the form of script needed to do this!

Cheers

OLIx

ps - seems like i owe you a beer now!

Hve a look at this: http://www.scriptingmatters.com/ASObjC. I’d probably do it a bit different now – using a separate class instead of records for every row – but it gives an idea of the bindings and how the array controller fits in.

I seem to have solved it with an if statement in the two required methods i posted which works a charm!

Feel like I’m getting somewhere…

on tableView_objectValueForTableColumn_row_(tv, aColumn, aRow)
if tv = aTableView then

		if theCountryArray's |count|() is equal to 0 then return end
		
		set ident to aColumn's identifier
		
		set theRecord to theCountryArray's objectAtIndex_(aRow)
		set theValue to theRecord's objectForKey_(ident)
		return theValue
		
	else if tv = bTableView then
		
		
		if scoreboardArray's |count|() is equal to 0 then return end
		
		set ident to aColumn's identifier
		
		set theRecord to scoreboardArray's objectAtIndex_(aRow)
		set theValue to theRecord's objectForKey_(ident)
		return theValue
		
	end if
	
end tableView_objectValueForTableColumn_row_