0

J'ai donc une application qui fonctionne bien sur le simulateur, mais pas sur le dispositif réel.Fonctionne dans iPhone Simulator, mais pas sur le téléphone

Lors de l'exécution, il me donne l'erreur suivante:

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' 

Un peu sur la structure: J'ai un contrôleur de la barre d'onglets, la première vue d'être un UINavigationController.

La vue est un UITableView. Une chose qui peut ou peut ne pas être liée est que si je fais @synthesize tableView; dans le contrôleur de vue de table, la table reste vide sur le simulateur et le téléphone (mais ne plante pas).

Si je le retire, il charge les données correctes sur le simulateur et se bloque sur le téléphone. Où doit-on lier/dataSource dans Interface Builder?

J'ai essayé de le lier à "View" à "File's Owner", et de faire un nouveau "ViewController" et aucun de ceux qui ont fonctionné.

+0

En outre, je suis plutôt confus quant à l'endroit où [UITableView isEqualToString:] est même appelé. – Kevin

Répondre

2

Les deux delegate et dataSource doivent être liés à File's Owner, qui est la classe de contrôleur de vue qui déclare la vue de table IBOutlet; ceci devrait être le même contrôleur de vue qui possède le fichier nib. En outre, ce contrôleur de vue doit implémenter les protocoles UITableViewDelegate et UITableViewDataSource.

Ajouter cette ligne @synthesize revenir, (à moins que vous UITableViewController le sous-classement, comme l'a souligné grahamparks dans les commentaires!) Assurez-vous que les connexions sont à droite, et, enfin, assurez-vous que vous avez déclaré une IBOutlet pour la vue de table, et connecté correctement entre votre constructeur de classe et d'interface.

+0

Yep, delegate et dataSource sont liés au propriétaire du fichier. Il existe un IBOutlet pour la vue de table, appelé tableView. Je ne vois pas où lier cela dans l'interface constructeur. Il y a une sortie appelée "vue" que j'ai connectée au propriétaire du fichier. Il y a ma tableView sous FirstViewController, mais l'accrocher à la vue de table ne semble pas aider non plus. – Kevin

+0

Vous devrez déclarer une sortie pour votre tableView dans l'en-tête de votre contrôleur de vue, avec '@property (nonatomic, retain) IBOutlet UITableView * tableView;'. Ensuite, vous devriez voir cette connexion apparaître dans le constructeur de l'interface. Cela fonctionne-t-il? –

+0

Si le contrôleur de vue est une sous-classe de UITableViewController (et que cela semble être le cas), il possède sa propre propriété tableView intégrée que vous ne devez normalement pas remplacer. Par conséquent, laissez la directive synthétiser. – grahamparks

0

Exécutez votre application avec NSZombieEnabled défini sur Oui. Voir http://www.cocoadev.com/index.pl?NSZombieEnabled pour une explication à ce sujet et comment le définir. Je pense que ce que vous trouverez est que l'application va maintenant lancer une exception dans le simulateur vous disant que vous envoyez un message à un objet qui a été libéré.

En fonction du message d'erreur que vous recevez, j'attends que le coupable soit un objet NSString ou NSMutableString. S'il s'agit d'un avertissement NSString, NSString peut être partagé par plusieurs objets différents, alors déterminer où la version supplémentaire est peut être difficile.

Ne jamais craindre cependant, Instruments aide énormément à cet égard. Voici un lien qui explique comment utiliser les Instruments pour savoir exactement où votre objet est conservé et libéré afin que vous puissiez déterminer quelle version est inappropriée. http://www.markj.net/iphone-memory-debug-nszombie/

Bonne chance!

1

Trouvé!

Il s'avère qu'il n'y avait pas vraiment de problème avec cela. Le problème était que le champ de date dans ma base de données, lorsqu'il était exécuté sur mon téléphone était toujours zéro/zéro.

Pourquoi? Parce que l'objet NSDate créé n'a jamais été initialisé et est resté à zéro.

Pourquoi? Parce que mon téléphone est dans 24 heures et n'a pas analysé le matin et après-midi correctement.

Leçons apprises!

+0

ce sont des bugs drôles ;-) –