Ich arbeite an einer iPhone-App mit Ziel C. Ich habe Klasse A, die einen NSMutableArray-Zeiger namens "Liste" erstellt. Aber in Klasse A erstelle ich niemals ein Objekt, auf das es zeigen kann. Stattdessen rufe ich eine Klassenmethode in Klasse B auf, um einige Daten aus einer SQLite-Datenbank abzurufen und ein NSMutableArray-Objekt dort aufzufüllen. Ich möchte in der Lage sein, den Zeiger in der Klasse A auf das NSMutableArray-Objekt zu setzen, das in der Methode der Klasse B erstellt wurde, indem ich es als Argument an die Methode übergebe. Ich kann es nicht tun, indem ich das Array zurückgebe, weil ich das SQLite-Ergebnis zurückgeben möchte.Wie verwende ich eine Methode, um einen Zeiger zu ändern?
Ich frage mich, ob ich das richtig mache? Ich habe noch nicht die ganze Methode geschrieben (wenn es fertig ist, wird es ziemlich lang sein), aber ich möchte wissen, ob ich das Pointer-Zeug richtig mache, bevor ich mit dem Rest anfange.
//ClassA.m
//...
NSMutableArray *list;
[ClassB populateArrayFromSqlite:&list];
//Now do stuff with "list", which should point to the array created in populateArrayFromSqlite
//...
//ClassB.m
+(int)populateArrayFromSqlite:(NSMutableArray**)ar {
NSMutableArray *array = [[NSMutableArray alloc] init];
//Here there will be code that populates the array using sqlite (once I write it)
//And then I need to set the "list" pointer in ClassA.m to point to this array
ar = &array; //Is this how?
return resultFromSqlite;
}
Habe ich es richtig gemacht? Oder verstehe ich etwas nicht? Ich denke, dieses Pointer-to-Pointer-Zeug klickt bei mir noch nicht. Nachdem ich ein paar allgemeine Quellen über Zeiger gelesen habe, vermute ich, dass ich es so machen würde, aber ein Teil von mir versteht nicht, warum das Argument ar nicht einfach ein regulärer Zeiger sein kann (im Gegensatz zu einem Zeiger auf Zeiger). .
+1 obwohl es wäre am besten, wenn '(newArray = nil!) Zu überprüfen', nur so Sie haben nicht versehentlich einen Nullzeiger dereferenziert. :) –
Rechts. Ich erwähnte diese Möglichkeit nur, um die Frage von Zeiger zu Zeiger zu beantworten, in der Praxis würde ich sicherlich die einfachere Lösung verwenden, die ich zuerst erwähnte. Ich werde eine Aussage hinzufügen, um die Dinge klarzustellen. – zoul
Danke, ich habe nicht einmal daran gedacht, das Objekt zuerst in Klasse A zu erstellen und einen Zeiger darauf an die Klasse-B-Methode zu übergeben. Auch bei deinem Beispiel glaube ich, dass ich das verstehe. Die Übergabe der Adresse eines Zeigers im Argument newArray sendet tatsächlich eine Kopie eines Zeigers an den Zeiger, und durch Dereferenzierung erhalten Sie den Zeiger selbst, dem Sie dann eine neue Adresse zuweisen können, richtig? – Adam