web-dev-qa-db-fra.com

plume mais n'a pas obtenu un 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 interceptée 'NSInternalInconsistencyException', raison: '- [UITableViewController loadView] a chargé la plume "MainListViewController" mais n'a pas obtenu de UITableView.'

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

La table view est créée par programme, il y a un mannequin MainListViewController.xib à charger depuis Mainwindow.xib Contrôleur de barre d'onglets.

J'ai également essayé de supprimer MainListViewController.xib, supprimez-le du MainWindow.xib Tab Bar Controller, a créé le MainListViewController dans AppDelegate et l'a ajouté au Tab Bar Controller en tant que UITabBarItem pour se débarrasser de ce problème de plume, mais j'obtiens toujours la même erreur.

57
irmu

Si vous avez une NIB pour la sous-classe UITableViewController, sa sortie viewmust doit être connectée à un UITableView.

Vous avez raison de supprimer MainListViewController.xib et 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é lors de la génération et de l'exécution. Supprimez donc l'application du simulateur et réessayez. Cela devrait alors fonctionner.

98
mattjgalloway

J'ai eu un problème similaire en utilisant des storyboards. Je publierai ma solution pour le bénéfice des autres. La clé est que si vous avez correctement défini le propriétaire du fichier sur la sous-classe 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 également s'appliquer aux plumes. Développez le "plan du document" afin de voir la hiérarchie de votre storyboard. Je vais inclure quelques captures d'écran ci-dessous. Le moyen rapide de résoudre ce problème est que vous souhaitez consulter votre voir dans le plan du document. Supprimez toute vue de table que vous en avez enfant. Faites glisser l'autre tableview au-dessus de la propriété view. Terminé. Je vais vous montrer des captures d'écran.

enter image description here

Remarquez les deux tableaux. Vous souhaitez supprimer le tableau1 et sa cellule.

enter image description here

Bien. Faites maintenant glisser table2 vers la vue et vous avez terminé. Devrait fonctionner maintenant. Fondamentalement, si vous avez une sous-classe de UITableViewController, elle doit avoir la vue Table à la place de la vue, sinon elle se plantera.

enter image description here

28
smileBot

La raison pourrait être:

Le fichier .h vérifie qu'il s'agit d'une sous-classe de UIViewController. cela résoudra le problème.

17
Abdul Yasin

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

11
oabarca

Si vous utilisez UITableView comme vue de dessus.

Comme ça :

enter image description here

Vous devez utiliser UITableViewController dans votre contrôleur

class ItemsViewController: UITableViewController

Si vous utilisez UITableView sous une vue dans votre Storyboatd.

Comme ça :

enter image description here

Vous devez utiliser UITableViewDelegate et UITableViewDataSource avec UIViewController

class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
10
saneryee

Je trouve la solution lors de l'utilisation de storyboards et d'une vue de table.

La clé est 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éé Accédez au contrôleur de vue de table (de notre table) et dans l'inspecteur d'identité, sélectionnez la classe personnalisée qui vient d'être créée auparavant (newViewController).

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

4
chadenis

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

3
Sanjay Kumar Yadav

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

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

    @interface TableController: UIViewController {

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

  3. Vous appelez peut-être un UIViewController au lieu d'un UITableView ou d'une vidéote dans votre .h

@interface TableController : UIViewController

ou

 @interface TableController : UITableViewController 
3
Joe Barbour

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

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

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

1
DevTorch

J'ai le même problème et après 3 heures de gaspillage, je le découvre ... "c'est une erreur" j'utilise la classe tableviewcontroller et donne la référence uiviewcontroller de cette classe, au lieu de voir la classe contrôleur, je prends la classe tableviewcontroller comme je prends uiviewcontroller dans le storyboard. supprimez donc la classe tableviewcontroller et collez votre code de la classe tableviewcontroller pour afficher la classe du contrôleur, "ne collez pas le code entier, collez la logique" après cela dans le storyboard dans l'inspecteur d'identité donnez la référence de classe de la classe actuelle du contrôleur de vue.

0
kanisht sahlot

J'ai également rencontré ce problème, mais j'ai utilisé le storyboard dans xcode 6.2. J'ai supprimé la vue correspondante du storyboard et j'ai fait glisser à nouveau le contrôleur de vue de table de la bibliothèque d'objets vers le storyboard, puis cela fonctionne.

0
Mengjie

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

Arrêt 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.'

Ils disent essentiellement que le contrôleur de vue de nib ne retourne pas une UITableView car ce n'est pas le cas - votre nib renvoie un View - qui est créé pour vous par défaut lorsque vous créez un nouveau ViewController dans le IDE Xcode.

La solution est aussi simple que de supprimer cela View - ce qui peut sembler contraire à la norme - mais allez-y et sélectionnez-le et retour arrière - puis faites glisser et déposez une UITableView à l'intérieur de votre ViewController et cette UITableView agira maintenant comme votre vue racine à l'intérieur de votre TableViewController.

Gardez à l'esprit que cela n'est nécessaire que pour les classes sous-classant directement UITableViewController.

Bonne chance.

0
Ryan

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 contrôleur de vue pointe vers cette classe:

Story Board

0
uplearnedu.com