58 votes

nib mais n'a pas obtenu de UITableView

Mon application fonctionne pour iOS 5.1 mais pour le simulateur iOS 6 j'obtiens l'erreur suivante.

Arrêt de l'application en raison d'une exception non attrapée NSInternalInconsistencyException', reason : '-[UITableViewController loadView] a chargé la nib "MainListViewController" mais n'a pas obtenu de UITableView".

Je sous-classe UITableViewController et je ne veux pas le changer.

Le tableau est créé de façon programmatique, il y a un faux tableau. MainListViewController.xib à charger à partir de Mainwindow.xib Contrôleur de la barre d'onglets.

J'ai aussi essayé de supprimer MainListViewController.xib le retirer de la MainWindow.xib Tab Bar Controller, a créé le MainListViewController dans AppDelegate et l'a ajouté au contrôleur de la barre d'onglets en tant que UITabBarItem pour me débarrasser de ce problème de plume, mais j'obtiens toujours la même erreur.

98voto

mattjgalloway Points 24217

Si vous avez un NIB pour le UITableViewController alors son view sortie doit être branché à un UITableView .

Vous avez le droit de supprimer MainListViewController.xib et faire tout cela en code, mais la raison pour laquelle cela n'a pas fonctionné pour vous est que l'ancien XIB ne sera pas supprimé lorsque vous construisez et exécutez. Donc, supprimez l'application du simulateur et réessayez. Cela devrait alors fonctionner.

28voto

cocoanut Points 2396

J'ai eu un problème similaire en utilisant des storyboards. Je vais poster ma solution pour en faire profiter les autres. La clé est que si vous avez correctement défini le propriétaire du fichier sur la sous-classe de UITableView, vous devez encore vous assurer que la propriété view est définie sur Table View. J'utilise des storyboards, mais le même genre de chose devrait s'appliquer aux nibs. Développez le "document outline" afin de voir la hiérarchie de votre storyboard. Je vais inclure quelques captures d'écran ci-dessous. La façon rapide de résoudre ce problème est de regarder votre voir dans le plan du document. Supprimez tout tableview qui en est l'enfant. Faites glisser l'autre tableau sur la propriété de la vue. C'est fait. Je vais vous montrer des captures d'écran.

enter image description here

Remarquez les deux tableaux. Vous voulez supprimer le tableau 1 et sa cellule.

enter image description here

Bien. Maintenant, faites glisser la table 2 vers la vue et vous avez terminé. Cela devrait fonctionner maintenant. En fait, si vous avez une sous-classe de UITableViewController, elle doit avoir Table View à la place de view, sinon elle se plantera.

enter image description here

17voto

Abdul Yasin Points 1075

La raison pourrait être :

Vérifiez que le fichier .h est une sous-classe de UIViewController. Cela résoudra le problème.

11voto

user2070775 Points 523

En bref, vous êtes en train de définir une sous-classe personnalisée de UITableViewController à un UIViewController ! !! Vous ne pouvez pas faire cela. Vous devez donner au UIViewController une sous-classe de UIViewController.

4voto

chadenis Points 41

Je trouve la solution en utilisant des Storyboards et 1 table View.

La clé est que lorsque vous créez une classe personnalisée (newViewController), vérifiez simplement qu'il s'agit d'une sous-classe de UITableViewController. Une fois créée, allez dans le contrôleur de vue de la table (de notre table) et dans l'inspecteur d'identité, sélectionnez la classe personnalisée qui vient d'être créée (newViewController).

Cela fonctionne pour moi. J'espère que mon commentaire aidera quelqu'un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X