2011-01-05 10 views
0

Ich entwerfe eine API-Schnittstelle für einen Magazin-Viewer. Etwas wie iGizmo (für iPad). Die Ansicht, in der ein Magazin angezeigt wird, ist einer TableView sehr ähnlich. Wie man Artikel als Abschnitte und Seiten als Zellen denken kann.Begründung für das Design von UITableViewDataSource

Aus diesem Grund möchte ich DataSource & Delegate in der gleichen Weise verfügbar machen, wie UITableView tut. Ich bin mir jedoch nicht ganz sicher, warum Apple TableView deligate/DataSource so entworfen hat, dass es immer den TableView als Parameter in jeder Methode zur Verfügung stellt.

Ich habe versucht, es zu rationalisieren, und ich fand keine gute Entschuldigung für solche api Design. Ich überlege, den Parameter tableView/magazineView in meiner API wegzulassen.

Sehen Sie gute Gründe für ein solches API-Design?

Wäre es nicht einfacher und klarer, Methoden wie die folgende zu schreiben?

– cellForRowAtIndexPath: 
– numberOfSections 
– numberOfRowsInSection: 
– sectionIndexTitles 
– sectionForSectionIndexTitle:atIndex: 
– titleForHeaderInSection: 
– titleForFooterInSection: 

Antwort

2

Interessante Frage. Während dies eine Vermutung ist, vermute ich, dass es da ist, so dass eine einzelne Datenquellenklasse der Delegat für mehrere Tabellenansichten mit unterschiedlichen Anforderungen sein kann. (z. B .: Sie kann das bereitgestellte tableView überprüfen und entsprechend reagieren.)

Wenn Sie diese Anforderung nicht voraussehen, können Sie höchstwahrscheinlich den entsprechenden Parameter aus Ihren Methodensignaturen weglassen.

Dann, wenn es überhaupt möglich ist, dass Sie vielleicht auf die "rufende" magnarview zugreifen möchten, könnten Sie den Parameter einfach dort lassen - es ist nicht so, als ob die Übergabe eines Zeigers unglaublich Ressourcen-ineffizient ist.

+1

Genau richtig, eine Datenquelle kann Inhalt für viele Ansichten bereitstellen, und ein Delegat kann der Delegat vieler Ansichten sein. Darüber hinaus muss ein Delegat oder eine Datenquelle möglicherweise in einigen Fällen die Ansicht, in der sie aufgerufen wird, überprüfen, um festzustellen, wie sie reagieren soll. – Jonah

+0

@Jonah, @middaparka, stimme ich zu, aber haben Sie jemals eine Datenquelle so implementiert, dass eine Instanz mehrere Tabellenansichten bedient? Warum nicht zwei Instanzen derselben Datenquellenklasse erstellen? Ein solches API-Design scheint die Tatsache zu ignorieren, dass objc eine OO-Sprache ist. –

+0

Ich schreibe eine Datenquelle, um eine bestimmte Ansicht eines Modells bereitzustellen, und kann diese Datenquelleninstanz möglicherweise für mehrere Ansichten wiederverwenden, z. B. unterschiedliche Tabellenansichten in unterschiedlichen Ausrichtungen, aber ich stimme zu, dass die Datenquelle normalerweise nicht berücksichtigt werden muss das Objekt, das die Daten anfordert. Meine Delegierten überprüfen andererseits ständig die Identität ihres Anrufers, zum Beispiel kann ich eine Sammlung von NSURLConnections verwalten, indem ich eine einzelne Klasse als ihren kollektiven Delegaten benutze. – Jonah

Verwandte Themen