DataSource frågor

Tråden skapades och har fått 9 svar. Det senaste inlägget skrevs .
1

Tjo!

Har lite funderingar kring DataSource.
Säg att jag har ett program som har rätt så många tabeller och comboboxar. Måste jag skapa egna DataSource klasser till praktiskt taget allihop (såvida dom inte göra exakt samma sak), eller gör jag det krångligt på något sätt?

Nej, du kan använda samma datasource till dem allihop. Ett vanligt pattern är att låta fönstrets controllerklass vara datasource till innehållet i fönstret. Om du har flera tableviews, skapa outlets för dem allihop och kolla vilken i metoden, t ex:

-(int)numberOfRowsInTableView:(NSTableView *)tableView {
	if(tableView == usersTableView)
		return [users count];
	else if(tableView == groupsTableView)
		return [groups count];
	
	/* ska inte hända */
	return 0;
}

tack! Detta innebär även att man kan kombinera tableviews och comboboxar m.fl i samma klass?

Självklart, de använder ju helt olika metoder för att fråga sin datasource om data, och alla skickar ju med en referens till den view som frågar efter datan.

Tack för hjälpen, men det uppstår lite problem...

Startar jag upp programmet så syns datan som det ska, men går jag bort en flik och tillbaka (eller likande) så krashar det och jag får antingen SIGBUS eller SIGSEGV fel... Varför funkar det då första gången? Glömmer jag att återställa något? Fast då borde det ju inte krasha om jag startar från en annan flik som det gör nu...

  • Medlem
  • Stockholm
  • 2005-04-18 13:41
Ursprungligen av Smeagol:

Tack för hjälpen, men det uppstår lite problem...

Startar jag upp programmet så syns datan som det ska, men går jag bort en flik och tillbaka (eller likande) så krashar det och jag får antingen SIGBUS eller SIGSEGV fel... Varför funkar det då första gången? Glömmer jag att återställa något? Fast då borde det ju inte krasha om jag startar från en annan flik som det gör nu...

Du måste eventuellt ha "retain" på något objekt. SIGBUS/SIGSEGV betyder att metoden du anropar finns inte längre eftersom obktet inte finns längre.

med andra ord... kolla retain och release.

Tack, retain gjorde susen!

  • Medlem
  • Stockholm
  • 2005-04-18 22:19
Ursprungligen av Smeagol:

Tack, retain gjorde susen!

Glöm inte att göra en release sen när du inte behöver objektet längre. Annars så får objektet en "retain" för mycket och "städas" inte bort.

http://www.stepwise.com/Articles/Technical/MemoryManagement.html
kolla in denna artikel på stepwise för mer info. om minneshantering i ObjC.

Har fortfarande sigsegv problem :/

Är det något speciellt man måste göra med Outlets?
För i min init så kan jag kolla vilken rad som är markerad i min NSComboBox, men i mina metoder går det inte, vad måste man göra för att det ska funka överallt ?

När måste man alloc och init klasserna ? [[object alloc] init] dvs.. mina dataviews är väl initierade genom nibben eller? *Ny till språket*

1
Bevaka tråden