Ich möchte 11 Textebenen für ein Pebble-Zifferblatt erstellen. Ohne eine Schleife würde der Code ungefähr so aussehen.C: Wie man eine feste Anzahl von Objekten mit einem Array von Zeigern erzeugt
static TextLayer *time_layer_a;
static TextLayer *time_layer_b;
... und so weiter.
Wie kann ich dies mit einer Schleife tun und die Zeiger auf die Objekte in einer Liste like Struktur setzen?
Liste: In diesem Fall wäre Array oder Kette ein besseres Wort, da die Sammlung von Zeigern für eine Anzeige mit einer festen Anzahl von Textebenen ist. Und die Anzahl der Ebenen wird während der Dauer des Programms nicht geändert. In C ist eine Liste eine Struktur, die dynamisch in der Größe geändert werden kann. Die Verwendung von "list like" könnte hilfreiche Leute zu der Annahme verleiten, dass die gesuchte Verkettungsmethode dynamisch sein soll. Das ist nicht richtig. Eine Struktur, die eine feste Zuordnung von Speicher verwendet, wird bevorzugt.
Edit: ein Array wie von John3136 vorgeschlagen funktionierte perfekt. Das Array hat den zusätzlichen Vorteil, die Objektzeiger mit seiner Verzögerung zu erzeugen. Und es ist ein Plus, dass John3136 eine Möglichkeit gab, den Code automatisch an die Größe des Arrays anzupassen. Dies ist ein nützliches Werkzeug zu haben.
Hier ist der Code, wie angewendet, um Textebenen für mein Zifferblatt zu erstellen.
Erklärungen:
int i;
static TextLayer* layers[11];
Lademethode:
// by John3136
// Note the sizeof() stuff means this works unchanged even if you change
// the number of layers.
for(i = 0; i < (short)(sizeof(layers)/sizeof(layers[0])); i++) // (short) converts unsigned interger to +- int
{
layers[i] = text_layer_create(GRect((bounds.size.w/4)*((i + 1)%4),
(bounds.size.h/PBL_IF_ROUND_ELSE(5,4))*((i > 2)
? ((i > 6)
? 3
: 2)
: 1),
(bounds.size.w/4) ,(bounds.size.h/PBL_IF_ROUND_ELSE(5,4))));
}
Entladens:
for(i = 0; i < (short)(sizeof(layers)/sizeof(layers[0])); i++)
{
text_layer_destroy(layers[i]);
}
Es ist nicht klar, was Sie erreichen wollen. Anscheinend haben Sie bereits einen Code, also stellen Sie einen [mcve] zur Verfügung. Erfahren Sie auch [fragen] und stellen Sie die notwendigen Informationen zur Verfügung. – Olaf
Wenn Sie diese Frage zu einem vollständigen und zusammenstellbaren Beispiel erweitern, wird unnötiges Durcheinander hinzugefügt. Ich denke, dass diese Frage genauso gut ist wie sie ist. – hugomg
@Olaf, ich schreibe mein erstes Programm in C. Ich kenne noch nicht alle Strukturen in C oder wofür sie am besten geeignet sind. Ich wusste, dass ich nach etwas suchte, das "listenartig" war. Zu der Zeit war das das Beste, was ich tun konnte. Ich hätte nach einem Array gefragt, wenn ich gewusst hätte, dass ein Array gut funktionieren würde. – kjl