2010-12-13 36 views
0

Ich habe ein Problem mit meiner App abstürzt. Der Haupt-Root-Controller ist ein Tab-Controller. Innerhalb des Tab-Controllers habe ich 4 Tasten, an denen ein Nav-Controller angeschlossen ist. Innerhalb des Nav-Controllers habe ich einen Tabellen-Controller mit ein paar Zellen. Wenn Sie auf eine Zelle klicken, gelangen Sie zu einem View-Controller. Jetzt klicke ich auf die Zelle und es bringt mich zum View-Controller. Wenn ich auf den Zurück-Pfeil des Nav-Controllers klicke, komme ich zurück zur Tabellenansicht. Das ist großartig, aber wenn ich auf eine neue Zelle klicke, stürzt die App ab. Jedes Mal, wenn ich auf eine Zelle klicke, gehe zurück und klicke auf eine andere Zelle, die App stürzt ab. Was mache ich falsch? Ich denke, ich sorge mich auch um alle meine Veröffentlichungen. bin mir aber nicht sicher.iOS App stürzt

Theres ein Fehler, den ich bekomme, wenn ich das Programm laufen lasse. Dort heißt es:

Buch Nav-Controller (Medical Wie ist) hat es NIB-Name“Eigenschaft auf‚BookTableViewController.nib‘, aber diese Ansicht Controller ist nicht beabsichtigt, auf diese Weise seine Ansicht gesetzt haben

.

ich bin auch setText immer auf diesem Code veraltet:

cell.text = [breakdownArray objectAtIndex:row]; 

Was mache ich es

auch meine didSelectRowAtIndexPa ändern th-Code ist:

NSInteger row = [indexPath row]; 
if (self.bookDetailViewController == nil); { 
    BookDetailViewController *aBookDetail = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:nil]; 
    self.bookDetailViewController = aBookDetail; 

    [aBookDetail release]; 

} 

bookDetailViewController.title = [NSString stringWithFormat:@"%Breakdown" , [breakdownArray objectAtIndex:row]]; 

Surviving2012AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.breakdownNavController pushViewController:bookDetailViewController animated:YES]; 

[delegate release]; 

} 
+2

Sie haben nichts über Ihre Plattform/OS/Framework/Programmiersprache erwähnt. Bitte fügen Sie weitere Details hinzu. Sie können Ihre Fragefähigkeiten sehr verbessern, indem Sie diesem Führer folgen: tinyurl.com/so-hints –

+2

Bitte formatieren Sie den Code, setzen Sie passende Umbauten und einen korrekten Fragentitel. –

+0

Um die veraltete Methode Warnung loszuwerden, verwenden Sie cell.textLabel.text anstelle von cell.text. Auch, rufen Sie nicht [Delegate Release] – ughoavgfhw

Antwort

0
cell.text = [breakdownArray objectAtIndex:row]; 

werden soll:

cell.textLabel.text = [breakdownArray objectAtIndex:row]; 

bookDetailViewController.title = [NSString stringWithFormat:@"%Breakdown" , [breakdownArray objectAtIndex:row]]; 

werden soll:

bookDetailViewController.title = [NSString stringWithFormat:@"%@", [breakdownArray objectAtIndex:row]]; 

Wenn Sie dies von einem des Viewcontrollers in dem TabBarController anrufen, dann dies:

Surviving2012AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.breakdownNavController pushViewController:bookDetailViewController animated:YES]; 
[delegate release]; 

Sollte sein:

[self.navigationController pushViewController:bookDetailViewController animated:YES]; 

Und wenn es nach wie vor ist danach abstürzt, dann werden Sie schreiben müssen, wie Sie definieren:

bookDetailViewController in Ihrer .h-Datei, und den Inhalt Ihres viewWillAppear und viewDidLoad Methoden.

0

Wie für Ihre veraltete Methode:

Änderung es zu:

cell.textlabe.text = [breakdownArray objectAtIndex:row]; 

und ich nicht den Dreh dieses:

Surviving2012AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.breakdownNavController pushViewController:bookDetailViewController animated:YES]; 

[delegate release]; 

Sie sagten, dass Sie eine Navigation in jeder haben Tab? Warum benutzt du es nicht?

[self.navigationController pushViewController:bookDetailViewController 


animated:YES]; 
+0

Ich verwende den Nav-Controller. Ich habe eine Tabelle im Nav-Controller. Ich klicke auf eine Zelle. es bringt mich zu einer Tischansicht. Dann drückte ich auf das Nav und wenn ich auf eine neue Zelle klicke. Die App stürzt ab. – misterbrownstone

+0

Y Ich sagte nur, dass ich nicht denke, dass Sie einen zusätzlichen navController erstellen müssen, weil Sie bereits einen in Ihrer Klasse haben könnten. Aber ich kenne deinen Code nicht und wenn die Dinge auf diese Weise funktionieren, ändere es lieber nicht ("ändere niemals ein laufendes System" ^^). Aber schauen Sie sich meinen Kommentar oben an und fügen Sie die Autorelease hinzu, um Speicherlecks zu vermeiden – Amandir

0

Apple iOS Reference Library - erhältlich direkt dort in Xcode unter Hilfe-> Dokumentation für Entwickler - legt sehr deutlich, was mit der veralteten .text Eigenschaft zu ersetzen: .textLabel and .detailTextLabel.

0

definitiv nicht Freigabe auf dem Delegat aufrufen. Sie rufen nur Release für ein Objekt auf, wenn Sie eine Methode dafür verwendet haben, die enthält: alloc/init, kopieren, neu oder behalten. Andernfalls geben Sie wahrscheinlich eine automatisch freigegebene Instanz frei, die zum Absturz führt.

beheben Sie dies, wenn es noch passiert, veröffentlichen Sie Ihre Ergebnisse, und wir werden ein anderes Aussehen haben.

+0

yup es stoppte abstürzen !! Vielen Dank! aber wird dies wie ein Speicherverlust oder etwas später bei der Verwendung der App verursachen? – misterbrownstone

+0

Sie könnten einfach einen Autorelease-Aufruf verwenden, indem Sie den Code ändern in: Surviving2012AppDelegate * delegate = [[[UIApplication sharedApplication] delegate] autorelease]; Damit übernimmt Ihr Programm die Freigabe. – Amandir

+0

es wird kein Leck verursachen, da es ein automatisch freigegebenes Objekt ist. Wenn es im Titel neue Kopie oder Alloc/Init hätte, dann würden Sie das Eigentum an dem Objekt übernehmen und sich um die Verwaltung des Speichers kümmern müssen. Wenn Sie es nicht besitzen, dann lassen Sie es nicht los. Alles, was Sie über die Speicherverwaltung wissen müssen, finden Sie hier: http: //interfacelab.com/objective-c-memory-management-for-lazy-people/ – MCannon

Verwandte Themen