Strukturen…

Grundlegendes:
C bietet die Möglichkeit mehrere Datentypen in Strukturen zusammenzufassen. So entsteht ein eigener Datentyp.

struct new_type {int id; char filename [8]; int sectors};
struct new_type new_var;
struct new_type {int id; char filename [8]; int sectors} new_var;

In beiden Fällen lassen sich die Struktur Elemente über den Punkt Operator ansprechen:

new_var.id=8

Von new_type lassen sich weitere Instanzen ableiten, ähnlich wie man das in Objektorientierten Sprachen mit neuen Objekten macht:

struct new_type new_var_2;

Pointer auf Strukturen:
Absichtlich frei gelassen 🙂

Strukturen an Funktionen übergeben:
struct new_type {int id; char filename [8]; int sectors} new_var;

Wir wollen der Funktion test(..) die Instanz new_var übergeben und dort der Instanz Variabel id einen neuen Wert zuweisen.

Aufruf:
test (&new_var);

Des Pudels Kern zum Verständnis ist nun die Klärung der Frage, wie wird test deklariert?

void test (struct test *test_pointer);

Innerhalb der Deklaration von test, bilden wir eine neue Instanz von test*test_pointer – und signalisieren das die keine neue Variable ist, sondern lediglich der Zeiger auf die Struktur test.

Auf die Instanzvariabeln von test, muss/ kann/ darf man nun über den pointer test zugreifen:
(*test_pointer).id=22;

(*…). lässt sich – viel anschaulicher – über den Pfeil Operator (- >) abkürzen:
test_pointer->id=22;

Array’s von Strukturen
Geht relativ einfach, so:
struct new_type {int id; char filename [8]; int sectors} new_var[8];

Der Zugriff auf die Strukturelemente geht genau so wie oben gezeigt, über den Punkt- Operator:
new_var[1].id=8

Wenn ich new_var[8]  an eine Funktion übergeben möchte, mache ich das genauso wie weiter oben gezeigt:
test (&new_var);

Zugriff auf die Struktur Elemente innerhalb von test:
test_pointer->id=22;

Wie greift man auf das nächste Element der Struktur Variable new_var auf – auf die nun test_pointer zeigt – zu? Man erhöht den Zeiger um eins!

*test_pointer++;
test_pointer->id=23;

In main lassen sich die Werte aus id auf herkömmliche Art- und Weise, das heißt nicht über einen Zeiger auf die Strukturvariable sondern über die Strukturvariable selbst aufrufen: id_n= new_var[n].id 

 

Slider und Actions..

Wenn ich in einem Formular einen Slider einbaue, dann möchte das Ergebnis, beim verschieben, unmittelbar in einem Textfeld präsentiert bekommen…

Objektive C funktioniert, grob, so: Jedes App das ich schreibe, ist eine Instanz von NSAppliction.

NSApplication verwaltet den Event Loop. Einfacher gesagt: Die Eigene App wird Bestandteil von NSAppliction, nun wird periodisch geprüft, ob ein Ereignis aufgetreten ist, dass meine App betrifft. Wenn Ja, bekommt meine App eine Nachricht welches Ereignis auftrat und kann nun über eine dafür implementierte Methode drauf entsprechend reagieren.

Ganz so kompliziert ist es im Falle eines Sliders nicht, vom Ablauf her aber ähnlich.

Den Slider kann man mit einer eigenen Methode verbinden, die , wird der Slider bedient, unmittelbar gestartet wird.

Bildschirmfoto 2013-12-21 um 17.26.51

 

Das Diagram zeigt wie es geht. Als erstes wird die Methode zeige_thr_m in Controller.m – der Implementoation der Klasse, die hier  „Controler“ heist – geschrieben. Die gepunktete Linie soll zeigen, dass die Methode nun im Conections Inspektor, zunächst ohne Verbindung, angezeigt wird. Letzter muss man nun manuell, mit der Maus mit dem gewünschten Slider Objekt herstellen. Das zeigt die durchgezogene Linie an.

Eine Vereinbarung von  zeige_thr_m im Interface der Klasse braucht es hier nicht.

Die Methode zeige_thr_m wird nun jedesmal, wenn der Slider bedient wird, aufgerufen und ausgeführt.