Veröffentlichung von Objekten bei der Verwendung eines uInavigationController

StackOverflow https://stackoverflow.com/questions/401389

  •  03-07-2019
  •  | 
  •  

Frage

Ich benutze einen uInavigationController und habe Probleme, Objekte zu veröffentlichen, wenn ich eine neue Ansicht schiebe. Ich möchte ein Objekt auf den neuen Controller festlegen, bevor ich es drücke. Die Art und Weise, wie ich das gerade mache, ist:

OpenPageViewController *varOpenPageController = [[OpenPageViewController alloc] initWithNibName:@"OpenPageViewController" bundle:nil];
varOpenPageController.bookObj = bookObj;
[[self navigationController] pushViewController:varOpenPageController animated:YES];
//[varOpenPageController release];

Wenn ich diese letzte Zeile übernehme, stürzt das Programm ab, wenn ich durch meinen Controller zurück navigiere. Ich habe auch eine andere Frage, wann/wie ein Objekt freigegeben werden soll. Im Bookobj habe ich ein veränderliches Array von Seitenobjekten und möchte den Text des aktuellen Seitenobjekts ändern. Ich mache das von:

Page *pageObj = [[bookObj pagesArray] objectAtIndex:currentPage];
pageObj.page_Text = textView.text;
[[bookObj pagesArray] replaceObjectAtIndex:currentPage withObject:pageObj];
//[pageObj release];

Das Programm stürzt ab, wenn ich auch diese letzte Zeile übernimmt. Es wird mich vorwärts navigieren, aber wenn ich zurück navigiere und versuche, wieder vorwärts zu gehen, stürzt es ab.

Autorelease Die Objekte bringen ähnliche Ergebnisse. Bitte beraten Sie, wenn Sie können. Vielen Dank.

Bearbeiten: Wenn ich das erste Beispiel freilasse, varopenpageController und den Simulator mit Lecks ausführen, scheint das Programm ordnungsgemäß zu funktionieren. Wenn ich jedoch keine Lecks ausführe, stürzt es ab. Hat jemand irgendwelche Ideen, warum dies passieren könnte? Vielen Dank.

War es hilfreich?

Lösung

Es könnte sich dafür bezahlen, das zu lesen Apple Memory Management -Dokument. Der zweite Element, den Sie nicht veröffentlichen müssen, da er nur einen Verweis auf das tatsächliche Element im BookObJ -Array enthält. Es ist nicht der tatsächliche Gegenstand, wenn das Sinn macht. Sie taten also tatsächlich das tatsächliche Element aus dem Array frei. Wenn Sie also zurückgehen und versuchen, darauf zuzugreifen, ist es nicht da.

Die Faustregel lautet: Geben Sie nur das frei, was Sie erstellen.

Andere Tipps

Ihr erstes Beispiel, um den View Controller auf den Navigationscontroller zu drücken, ist mit der Freigabe korrekt. Wenn das bei der Rückkehr abfällt, bedeutet dies wahrscheinlich, dass Sie in der OpenPageViewController -Oversenloc -Methode etwas falsch machen Die Ansichts -Controller -Instanz wie in Ihrem Code zugewiesen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top