0

So habe ich eine App, die gut auf dem Simulator läuft, aber nicht auf dem eigentlichen Gerät.Funktioniert in iPhone Simulator, aber nicht auf Telefon

Zur Laufzeit gibt es mir die folgende Fehlermeldung:

2010-12-05 19:58:32.006 Sports[4668:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableView isEqualToString:]: unrecognized selector sent to instance 0x800800' 

ein wenig über die Struktur: Ich habe einen Tab Bar-Controller, die erste Ansicht eine UINavigationController zu sein.

Die Ansicht darin ist eine UITableView. Eine Sache, die verwandt sein kann oder nicht, ist, dass ich @synthesize tableView mache; Im Tabellenansicht-Controller bleibt die Tabelle sowohl auf dem Simulator als auch auf dem Telefon leer (stürzt jedoch nicht ab).

Wenn ich das herausnehme, lädt es die richtigen Daten auf dem Simulator und stürzt auf dem Telefon ab.

Wo sollte delegate/dataSource im Interface Builder verlinkt sein? Ich habe versucht, es mit "View" zu "File's Owner" zu verbinden, und einen neuen "ViewController" zu machen, und keiner von denen hat funktioniert.

+0

Auch ich bin ziemlich verwirrt, wo [UITableView isEqualToString:] sogar aufgerufen wird. – Kevin

Antwort

2

Sowohl die delegate und dataSource sollte File's Owner verknüpft werden, die die View-Controller-Klasse ist, die die Tabelle Ansicht als IBOutlet erklärt; Dies sollte derselbe View-Controller sein, der die NIB-Datei besitzt. Außerdem sollte dieser Ansichtscontroller die Protokolle UITableViewDelegate und UITableViewDataSource implementieren.

hinzufügen, dass @synthesize Linie zurück in, (es sei denn, Sie UITableViewController sind Subklassen, wie grahamparks in den Kommentaren darauf hingewiesen!) Stellen sicher, dass diese Verbindungen richtig sind, und schließlich stellen Sie sicher, Sie haben ein IBOutlet für die deklarierte Tabellenansicht, und verband das ordnungsgemäß zwischen Ihrer Klasse und Interface Builder.

+0

Yep, Delegate und DataSource sind mit dem Eigentümer der Datei verknüpft. Es gibt ein IBOutlet für die Tabellenansicht namens tableView. Ich sehe jedoch nicht, wo ich das im Interface Builder verlinken soll. Es gibt eine Steckdose namens "view", die ich mit dem Eigentümer der Datei verbunden habe. Es gibt meine TableView unter FirstViewController, aber das Einhängen in die Tabellenansicht scheint auch nicht zu helfen. – Kevin

+0

Sie müssen eine Steckdose für Ihre TableView in Ihrem View-Controller-Header deklarieren, mit '@property (nonatomic, behalten) IBOutlet UITableView * tableView;'. Dann sollten Sie sehen, dass diese Verbindung im Interface Builder angezeigt wird. Funktioniert das? –

+0

Wenn der View-Controller eine Unterklasse von UITableViewController ist (und es so aussieht), hat er eine eigene eingebaute Eigenschaft TableView, die Sie normalerweise nicht überschreiben sollten. Lassen Sie deshalb die Syntheserichtlinie weg. – grahamparks

0

Führen Sie Ihre App mit NSZombieEnabled auf Ja. Eine Erläuterung dazu und wie man es einstellt, finden Sie unter http://www.cocoadev.com/index.pl?NSZombieEnabled. Ich denke, was Sie finden werden, ist, dass die App jetzt eine Ausnahme im Simulator wirft, die Ihnen mitteilt, dass Sie eine Nachricht an ein Objekt senden, das freigegeben wurde.

Basierend auf der Fehlermeldung, die Sie empfangen, erwarte ich, dass der Schuldige ein NSString- oder NSMutableString-Objekt ist. Wenn es sich um eine NSString-Warnung handelt, könnte dieser NSString von mehreren verschiedenen Objekten gemeinsam genutzt werden, um herauszufinden, wo die zusätzliche Freigabe liegt.

Keine Angst, Instrumente helfen in dieser Hinsicht enorm. Hier ist ein Link, der erklärt, wie Sie mithilfe von Instrumenten herausfinden können, wo genau Ihr Objekt aufbewahrt und freigegeben wird, damit Sie herausfinden können, welche Version unangemessen ist. http://www.markj.net/iphone-memory-debug-nszombie/

Viel Glück!

1

Es gefunden!

Es stellte sich heraus, dass es überhaupt kein Problem gab. Das Problem war, dass das Datumsfeld in meiner Datenbank, wenn es auf meinem Telefon lief, immer Null/Null war.

Warum? Weil das NSDate-Objekt nie initialisiert und auf Null gesetzt wurde.

Warum?

Da mein Telefon ist in 24 Stunden Zeit und nicht die AM und PM richtig analysieren.

Lessons gelernt!

+0

das sind lustige Bugs ;-) –

Verwandte Themen