UITableView et Container View
Bonjour
Comme vous l'aurez surement remarqué, je suis à fond sur les TableView en ce moment. /wink.png' class='bbc_emoticon' alt=';)' /> Donc dans mon projet j'ai une ViewController et une Container View reliées à la même class nommée "FirstViewController".
Dans ma container view, j'ai mon tableView dont le dataSource et le delegate son reliés à FirstViewController.
Lorsque j'ajoute mes données à mon dataSource et que j'effectue un reloadData, mes données ne s'affichent pas dans mon tableView.
Quelqu'un a-t-il une idée sur la question ?
Merci /smile.png' class='bbc_emoticon' alt=':)' />
Comme vous l'aurez surement remarqué, je suis à fond sur les TableView en ce moment. /wink.png' class='bbc_emoticon' alt=';)' /> Donc dans mon projet j'ai une ViewController et une Container View reliées à la même class nommée "FirstViewController".
Dans ma container view, j'ai mon tableView dont le dataSource et le delegate son reliés à FirstViewController.
Lorsque j'ajoute mes données à mon dataSource et que j'effectue un reloadData, mes données ne s'affichent pas dans mon tableView.
Quelqu'un a-t-il une idée sur la question ?
Merci /smile.png' class='bbc_emoticon' alt=':)' />
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
-Ton reload tu le fais quand ?
-Tu as vérifié que les données étaient bien chargées ?
-Tu peux montrer le bout de code ?
Je parie que tu as oublié de l'alloc/init au début avant de lui faire des addObject (et donc que pile = nil).
Après je sais pas si ça se fait automatiquement si tu l'implémente pas.
Sinon Ali + 1:)
C'est effectivement automatiquement set a 1 si on implémente pas la methode.
C'est bon à savoir, cette méthode est ajoutée automatiquement quand on créé un UITableViewController donc je me suis toujours embêté à mettre le retour à 1 /smile.png' class='bbc_emoticon' alt=':)' />
Donc "pile" n'est pas "nil" lorsque je passe par l'action "enter". La console m'indique bien que "pile" est égal à 1.
La méthode "- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView", je l'avais déjà mise dans mon code mais j'ai oublié de vous la montrer.
Et le résultat visuel, ça donne ? (T'es sûr que t'as pas une cellule d'affichée, mais vide ou avec le texte pas visible car de couleur trop claire ou cachée ou quoi, mais que la cellule serait bien présente ?)
Après j'ai testé le même code mais j'ai déplacé mon TableView dans ma ViewController et ça marche très bien. Les cellules affichent bien les données. La couleur du background n'empêche absolument pas la lecture du texte.
En tout cas j'ai remarqué un truc : après le reloadData, mon code ne passe pas par la méthode "- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath", alors qu'elle passe dedans lorsque mon TableView est dans la ViewController.
En dessous de cette ligne :
Peux-tu faire :
et nous montrer ce qui sort dans la console stp?
çà fait doublon avec le post d'Alligator, mais apparemment tu n'a pas fait d'alloc init dans ton viewDidLoad...
Il te faudrait :
Et bien sûr, si tu n'utilises pas ARC, ne pas oublier de mettre pile à nil dans le viewDidLoad et de faire le release dans le dealloc... /kiss.gif' class='bbc_emoticon' alt=':-*' />
Enfin, si ton problème persiste, n'hésites pas à faire des NSLog pour vérifier le contenu de ton mutableArray...
Les deux lignes, tu veux que je les mettent dans mon projet où mon TableView est dans ma Container View ? Si c'est celui-là dont tu parles, mon code ne passe pas dans la méthode "- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath", là où tu veux que je mette tes lignes.
Sinon si c'est dans l'autre projet, voici ce que ça met :
2012-10-31 12:35:49.173 Calculatrice[726:c07]
(
2
)
2012-10-31 12:35:49.176 Calculatrice[726:c07]
2
Alf1996 :
Qu'est-ce qui change entre le alloc/init et le NSMutableArray/array ? Dans mon code ça fait exactement la même chose. /wink.png' class='bbc_emoticon' alt=';)' />
Ca dépend si tu as ARC d'activé, ça dépend si tu affectes le résultat à une property(retain) ou property(assign), ou à une ivar weak ou strong...
C'est la base de la gestion mémoire en Objective-C. A réviser d'urgence (même si tu utilises ARC, tu as besoin de comprendre le mécanisme d'ownership et de strong/weak).
Cela pourrait expliquer la différence de comportement entre la table dans le UIViewController, et le UITableViewController...
N'oublie pas qu'un jour, quelqu'un lira ton post et se dira "tiens j'ai exactement le même problème...", et il sera bien content de trouver la solution sans avoir à reposer la même question ! C'est aussi çà le but d'un forum, non ?
Même si c'est un truc tout con, c'est bien de dire ce qui a finalement résolu le problème, à moins que celui-ci ne subsiste !?
A bientôt
Vous pouvez voir ma Container view et mon TableView dont le dataSource et le delegate sont reliés à FirstViewController dans les photos jointes.
FirstViewController.h :
FirstViewController.m :
Je ne vois vraiment pas où est mon erreur...
Par ailleurs, perso, je relie mes datasource et delegate par programme dans le viewDidLoad, plutôt que dans IB.
Mais je ne pense pas que le problème vienne de là ...
Si tu ne passes jamais dans cellForRowAtIndexPath, c'est peut-être que pile est toujours à nil (voir quelques posts plus haut...).
J'insiste sur la déclaration de pile :
Pour savoir si pile est différent de nil, essaye de faire un NSLog, par exemple dans numberOfRowsInSection, avant le return :
Si tu n'as pas d'affichage dans la console, essaye de mettre ces deux lignes NSLog à un autre endroit où tu es sûr de passer.
Bon débugage... /wink.png' class='bbc_emoticon' alt=';)' />
Sinon vu que tu utilise le storyBoard pas la peine de mettre /size][/font][/color][color=#000000][font=monospace][size=3]tableView setRowHeight[/size][/font][/color][color=#666600][font=monospace][size=3]:[/size][/font][/color][color=#006666][font=monospace][size=3]30[/size][/font][/color][color=#666600][font=monospace][size=3; tu as juste à modifier la taille dans l'interface prévu.
Ensuite pour le background le faire dans cette methode n'a jamais fonctionné chez moi... essaye dans la méthode delegate suivante :
- (void)tableView: (UITableView*)tableView willDisplayCell: (UITableViewCell*)cell forRowAtIndexPath: (NSIndexPath*)indexPath
- Le code
if(cell ==nil){
cell =[/size][/font][/color][color=#660066][font=monospace][size=3]UITableViewCell[/size][/font][/color][color=#000000][font=monospace][size=3] alloc[/size][/font][/color][color=#666600][font=monospace][size=3 initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
est inutil (Automatic Cell Loading depuis iOS 5)
- Vérifie dans ton storyboard que ta table view est bien une sous-view de la view principale de ton controller
- Et si tu ajoutais un [super viewDidLoad] dans ton - (void)viewDidLoad ?
J'ai essayé ta méthode "tableView.delegate" et ça ne marche pas non plus. Mais il me semble que relier sur IB ou par code ça revient à faire la même chose. Après j'ai essayé "pile = [[NSMutableArray alloc] init]" mais sans succès. J'ai également fait les NSLog, et je me suis rendu compte que mon code ne passe pas dans toutes les méthodes de configuration de mon tableView... Donc je les ai misent dans le seul endroit où mon code passe : dans l'ajout d'un object dans pile. Et pile n'est pas nil et contient bien des éléments (ceux que j'ai ajouté).
Sinon Soldras, je n'ai pas de toolBar ou de tabBar. En fait j'ai créer un petit projet test pour tester les tableView dans les Container View donc en fait ma Container View est en plein milieu de ma viewController donc mon tableView n'est pas caché (j'ai même vérifié la taille du TableView) /wink.png' class='bbc_emoticon' alt=';)' />.
Merci pour le conseil "[font=helvetica, arial, sans-serif][[/font][font=helvetica, arial, sans-serif]tableView setRowHeight[/font][font=helvetica, arial, sans-serif]:[/font][font=helvetica, arial, sans-serif]30[/font][font=helvetica, arial, sans-serif]];[/font]" /smile.png' class='bbc_emoticon' alt=':)' />
Kubernan :
Mon TableView mal placé c'est juste que je l'ai placé aléatoirement mais je l'ai mit en plein écran sur ma ContainerView (voir photo jointe) /wink.png' class='bbc_emoticon' alt=';)' />
Merci pour le code inutile ! C'est bien pratique !
J'ai bien vérifié que mon tableView était une sous-view de la vue de FirstViewController et pour le "[font=helvetica, arial, sans-serif][super viewDidLoad][/font]" je l'ai bien ajouté dans mon code.
Merci pour toutes vos réponses mais ça ne marche toujours pas... /smile.png' class='bbc_emoticon' alt=':)' />
J'ai essayé ta méthode "tableView.delegate" et ça ne marche pas non plus. Mais il me semble que relier sur IB ou par code ça revient à faire la même chose. Après j'ai essayé "pile = [[NSMutableArray alloc] init]" mais sans succès. J'ai également fait les NSLog, et je me suis rendu compte que mon code ne passe pas dans toutes les méthodes de configuration de mon tableView... Donc je les ai misent dans le seul endroit où mon code passe : dans l'ajout d'un object dans pile. Et pile n'est pas nil et contient bien des éléments (ceux que j'ai ajouté).
Sinon Soldras, je n'ai pas de toolBar ou de tabBar. En fait j'ai créer un petit projet test pour tester les tableView dans les Container View donc en fait ma Container View est en plein milieu de ma viewController donc mon tableView n'est pas caché (j'ai même vérifié la taille du TableView) /wink.png' class='bbc_emoticon' alt=';)' />.
Merci pour le conseil "[font=helvetica, arial, sans-serif][[/font][font=helvetica, arial, sans-serif]tableView setRowHeight[/font][font=helvetica, arial, sans-serif]:[/font][font=helvetica, arial, sans-serif]30[/font][font=helvetica, arial, sans-serif]];[/font]" /smile.png' class='bbc_emoticon' alt=':)' />
Kubernan :
Mon TableView mal placé c'est juste que je l'ai placé aléatoirement mais je l'ai mit en plein écran sur ma ContainerView (voir photo jointe) /wink.png' class='bbc_emoticon' alt=';)' />
Merci pour le code inutile ! C'est bien pratique !
J'ai bien vérifié que mon tableView était une sous-view de la vue de FirstViewController et pour le "[font=helvetica, arial, sans-serif][super viewDidLoad][/font]" je l'ai bien ajouté dans mon code.
Merci pour toutes vos réponses mais ça ne marche toujours pas... /smile.png' class='bbc_emoticon' alt=':)' />
Au pire un test tout bête, rempli ta pile à la main pour regarder si ça s'affiche. Au moins tu pourras savoir si c'est du coté de la pile ou de la tableView...
comme ça :
tu met ce code dans la méthode viewDidLoad.
Si tu vois rien c'est la tableView si tu vois les éléments c'est ta pile /wink.png' class='bbc_emoticon' alt=';)' />
pourtant il passe bien par les autres methodes delegate O_O
Il fait pas le reloadData ...