7

Je pense qu'il me manque quelque chose de simple, mais je n'arrive pas à comprendre exactement ce que c'est.Iphone: TabView + TableView

J'essaie de configurer une application avec un UITabViewController, et l'un des onglets aura UITableView et UISearchBar (mais pas de contrôleur de navigation). J'ai mis en place le UITabViewController avec tous les onglets dans l'interface de construction, et les vues sont dans leurs propres fichiers xib. Le fichier xib de l'onglet avec le UITableView est configuré et connecté comme suit.

Stuff dans le navigateur: propriétaire du fichier (classe est ma classe personnalisée qui est un enfant de UITableViewController) Vue -> Voir

View (class UIView, reference view -> File's owner) contains: 
     UITableView (if i try and set references to the data source/delegate, the app breaks) 
     UISearchBar (unconfigured at the moment) 

Cette configuration affiche tous les éléments et ne se verrouille pas, mais Je ne peux pas assigner un DataSource sans qu'il ne plante quand j'essaye de charger l'onglet avec UITableView. Que dois-je faire pour obtenir des données dans cette table, dans IB ou dans le code? Mes idées sont les suivantes:

  1. Mettre en œuvre une classe UITableView personnalisée, se connecter à la vue table dans IB ou au contrôle tableview personnalisé dans Xcode. Battez la tête ou l'ordinateur portable contre le mur jusqu'à ce que cela fonctionne.

Mise à jour: est ici l'erreur le simulateur pousse à la console lorsque je connecte la source de données de Tableview et délégué au propriétaire du fichier (qui est classe est mon tableviewcontroller personnalisé).

2/14/09 6:59:12 PM TabBarWillbeRight [33172] * Mettre fin application en raison d'exception uncaught 'NSInvalidArgumentException', raison: « * - [UIViewController tableView: numberOfRowsInSection:]: sélecteur non reconnu envoyé à l'instance 0x523760

Répondre

1

Si vous ne pouvez pas affecter le DataSource sans qu'il ne plante, cela suggère que certaines des méthodes de délégué DataSource n'ont pas été implémentées.

En particulier la classe que vous assignez comme source de données devrait mettre en œuvre UITableViewDataSource

+0

I mis en œuvre numberOfSectionsInTableView, numberOfRowsInSection et cellForRowAtIndexPath, et ils ont tous le retour 1, 1 et une cellule static cell.text. Ai-je manqué une méthode? –

+0

Non, ça devrait être ça. Bien que juste pour être précis, il s'agit de tableView: numberOfRowsInSection et tableView: cellForRowAtIndexPath –

+0

right - c'est ainsi qu'ils sont configurés - alors quelle devrait être exactement ma source de données/délégué ... J'ai essayé de le définir avec setDataSource: et setDelegate aussi . Peut-être que je manque une certaine configuration dans AppDelegate.m? –

0

Êtes-vous sûr que votre classe implémente des classes UITableViewDelegate et UITableViewDataSource? Vérifiez également la déclaration de votre viewcontroller. Votre fichier .h devrait être quelque chose comme ceci

@interface MyClass:UIViewController <UITableViewDelegate,UITableViewDataSource> 

Tout le reste semble être en place. Si la déclaration de classe ne spécifie pas qu'elle implémente UITableViewDelegate et DataSource, vous obtiendrez l'exception dès que vous aurez défini la source de données.

+0

hmmm - ça sonne comme si c'était ça. Depuis lors, j'ai abandonné le constructeur d'interface et créé toutes les méthodes pertinentes par programme. La morale de l'histoire: les boîtes noires ne sont pas amusantes. –

+0

Même si vous n'utilisez pas IB, assurez-vous que la déclaration de classe mentionne que la classe implémente UITableViewDelegate et UITableViewDataSource. – lostInTransit

24

J'ai eu un problème similaire avec le même message d'erreur. La solution simple était de cliquer sur la vue dans le TabBarController (le rectangle gris qui indique "view loaded from ..") dans IB et de changer la classe de l'élément à la classe de mon TableViewController.

+1

Directement sur place! Merci! –

+0

A travaillé pour moi aussi. Merci! – lguy

+0

Fonctionne pour moi, génial !!!! : D – tarnfeld

2

J'ai eu le même problème. 1. Assurez-vous que votre vue implémente les méthodes de source de données 2. Dans IB, définissez l'identité de classe pour votre vue à la classe qui implémente les méthodes de source de données. 3.Faites un clic droit sur la vue IB et vérifier la source de données est relié à Fichiers propriétaire, non Voir Hooking up TableView in IB

Questions connexes