nib mais n'a pas eu un UITableView

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

Terminaison de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: '- [UITableViewController loadView] a chargé la plume "MainListViewController" mais n'a pas obtenu de UITableView.'

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

La vue de table est créée par programmation, il y a un mannequin MainListViewController.xib à charger à partir du Mainwindow.xib de Mainwindow.xib tabs Mainwindow.xib .

J'ai également essayé de supprimer MainListViewController.xib , l'enlevé du controller de barre d'tabs MainWindow.xib , créé le MainListViewController dans AppDelegate et l'ai ajouté au controller de UITabBarItem d' UITabBarItem comme UITabBarItem pour me débarasser de ce problème de nib, mais j'obtiens toujours la même erreur.

Si vous avez un NIB pour la sous-class UITableViewController alors son view doit être connecté à UITableView .

Vous avez raison de supprimer MainListViewController.xib et de tout faire dans le code, mais la raison pour laquelle cela n'a pas fonctionné pour vous est que l'ancien XIB ne sera pas supprimé lorsque vous générez et exécutez. Supprimez donc l'application du simulateur et réessayez. Cela devrait fonctionner ensuite.

J'ai eu un problème similaire en utilisant des storyboards. Je postrai ma solution pour le bénéfice des autres. La key est que si vous avez correctement défini le propriétaire du file dans la sous-class de UITableView, vous devez toujours vous assurer que la propriété view est définie sur la vue Table. J'utilise des storyboards, mais le même genre de chose devrait s'appliquer aussi aux nibs. Développez le «plan du document» afin que vous puissiez voir la hiérarchie de votre storyboard. Je vais inclure quelques captures d'écran ci-dessous. La manière rapide de résoudre ceci est que vous voulez regarder votre vue dans l'aperçu du document. Supprimez toute vue de table que vous avez en tant qu'enfant. Faites glisser l'autre tableview au-dessus de la propriété view. Terminé. Je vais vous montrer dans les captures d'écran.

entrez la description de l'image ici

Notez les deux tables. Vous voulez supprimer table1 et sa cellule.

entrez la description de l'image ici

Bien. Maintenant faites glisser la table2 vers la vue et vous avez terminé. Devrait fonctionner maintenant. Fondamentalement, si vous avez une sous-class de UITableViewController, alors il doit avoir Table View à la place de vue ou il va planter.

entrez la description de l'image ici

La raison pourrait être:

Le file .h vérifie qu'il s'agit d'une sous-class de UIViewController. ça va résoudre le problème.

En bref, vous définissez une sous-class UITableViewController personnalisée à un UIViewController !! Tu ne peux pas faire ça. Vous devez donner à UIViewController une sous-class UIViewController.

Je trouve la solution lors de l'utilisation de Storyboards et 1 table View.

La key est lorsque vous créez une class personnalisée (newViewController) vérifiez simplement qu'il s'agit d'une sous-class de UITableViewController. Une fois créé Allez dans le controller de vue table (de notre table) et dans l'inspecteur d'identité select la class personnalisée qui vient d'être créée (newViewController).

Ça marche pour moi. J'espère que mon commentaire aidera quelqu'un.

Veuillez connecter votre vue de table en tant que sortie View.outlet doit être connectée à UITableView.

Il y a plusieurs raisons pour lesquelles cela peut se produire.

  1. Vous n'avez peut-être pas ajouté UITableViewDelegate & UITableViewDataSource à votre file .h

    @interface TableController: UIViewController {

  2. Vous n'avez peut-être pas connecté vos sockets déclarées aux composants du Storyboard / Nib

  3. Vous appelez peut-être un UIViewController au lieu d'un UITableView ou vide-verser dans votre .h

@interface TableController : UIViewController

ou

  @interface TableController : UITableViewController 

Si vous utilisez UITableView en tant que votre vue de dessus.

Comme ça :

entrez la description de l'image ici

Vous devez utiliser UITableViewController dans votre controller

 class ItemsViewController: UITableViewController 

Si vous utilisez UITableView sous une vue dans votre Storyboatd.

Comme ça :

entrez la description de l'image ici

Vous devez utiliser UITableViewDelegate et UITableViewDataSource avec UIViewController

 class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 

J'ai eu ce problème et le résoudre était juste une chose simple.

Gardez la plume si vous avez déjà créé …

Allez dans (file XIB) et ajoutez un composant tableView de la bibliothèque d'objects à l'écran iPhone du file XIB, et cela devrait fonctionner 🙂

Cela a fonctionné pour moi. J'espère que cela vous aide.

Dans AppDelegate ->

 #import "TableViewController.h" // name of your TableViewController class - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //PUT TableViewController *controller = [[TableViewController alloc] initWithStyle:UITableViewStylePlain]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = controller; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; // Override point for customization after application launch. return YES; } 

Assurez-vous que dans le storyboard votre controller de vue pointe vers cette class:

Story Board

J'ai également rencontré ce problème, mais j'ai utilisé storyboard dans xcode 6.2. J'ai supprimé la vue correspondante du storyboard et j'ai de nouveau fait glisser le controller de vue de table de la bibliothèque d'objects vers le storyboard, puis cela a fonctionné.

réponse @smileBot m'a aidé à réaliser la solution est très facile et l'erreur soulevée par iOS est logique

Terminaison de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: '- [UITableViewController loadView] a chargé la plume "MainListViewController" mais n'a pas obtenu de UITableView.'

Leur dire fondamentalement que le controller de vue de la plume ne renvoie pas un UITableView parce que ce n'est pas, pour la plupart – votre plume returnne une vue – qui est créée pour vous par défaut lorsque vous créez un nouveau ViewController dans l'IDE Xcode.

La solution est aussi simple que de supprimer cette View – qui peut sembler contraire à la norme – mais de la sélectionner et de revenir en arrière – puis glisser et déposer un UITableView dans votre ViewController et cette UITableView agira maintenant comme vue racine dans votre TableViewController.

Gardez à l'esprit que ceci n'est nécessaire que pour les classs qui sous-classifient UITableViewController.

Bonne chance.

J'ai le même problème et après 3 heures je le découvre … "c'est une erreur" j'utilise la class tableviewcontroller et donne la reference uiviewcontroller de cette class, au lieu de voir la class controller je prends la class tableviewcontroller pendant que je prends uiviewcontroller dans storyboard. supprimez donc la class tableviewcontroller et collez le code de la class tableviewcontroller pour afficher la class du controller, "ne pas coller la logique du code entier seulement" dans le storyboard de l'inspecteur d'identité.