Custom UITableViewCell avec Storyboard

Bonjour à  vous tous,

je suis entrain de faire une TableView dynamic en utilisant Storyboard.

En fait j'ai réussi à  faire ceci avec le style de cell par defaut.

Maintenant, je veux faire une cellule "customisée". Pour ce la j'ai crée une nouvelle class que j'ai appelé NewsCell qui contient les différents Labels.

La cell dans le StoryBoard et une "subclass" de NewsCell.

Le "cell identifier" est NewsCell aussi.

voici la méthode [font=Arial,]cellForRowAtIndexPath:[/font]


<br />
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath<br />
{<br />
NewsCell *cell = (NewsCell *)[tableView dequeueReusableCellWithIdentifier:@&quot;NewsCell&quot;]; //signal : SIGABRT<br />
    News *info = [self.news objectAtIndex:indexPath.row];<br />
    cell.titreLabel.text = info.titre;<br />
    cell.descriptionLabel.text = info.description;<br />
    return cell;<br />
}<br />




En exécutant cette application, elle crash avec le message d'erreur suivant : *[font=Arial,] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'The NIB data is invalid.'[/font]



[font=Arial,]Merci d'avance pour votre aide[/font][font=Arial,] [/font]

Réponses

  • Pour ton probleme je sais pas trop d'ou il vient, mais si tu essaye d'utiliser des UITableViewCell que tu n'as pas en mémoire "dequeueReusableCellWithIdentifier" ca ne risque pas de fonctionner. Par défaut la Queue de Cell réutilisable est vide je crois. Donc te faut faire un truc genre :


    <br />
    NewsCell *cell = (NewsCell *)[tableView dequeueReusableCellWithIdentifier:@&quot;NewsCell&quot;];<br />
    if (&#33;cell)<br />
    {<br />
      NewCell *cell = [[[NewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]] autorelease];<br />
    }<br />
    
  • Merci pour la réponse,

    Justement, j'ai fai ça aussi, mais le problème persiste, en essayant de changer le cell identifier (par quelque chose qui n'existe pas), l'appli se lance, certes il n'y a rien dans la table, mais ça marche quand même.
  • AliGatorAliGator Membre, Modérateur
    'Alak' a écrit:


    Pour ton probleme je sais pas trop d'ou il vient, mais si tu essaye d'utiliser des UITableViewCell que tu n'as pas en mémoire "dequeueReusableCellWithIdentifier" ca ne risque pas de fonctionner. Par défaut la Queue de Cell réutilisable est vide je crois. Donc te faut faire un truc genre :


    <br />
    NewsCell *cell = (NewsCell *)[tableView dequeueReusableCellWithIdentifier:@&quot;NewsCell&quot;];<br />
    if (&#33;cell)<br />
    {<br />
      NewCell *cell = [[[NewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]] autorelease];<br />
    }<br />
    

    Je n'ai jamais utilisé Storyboard personnellement, mais de ce que j'ai cru comprendre ce n'est plus vrai avec StoryBoard : dequeueReusableCellWithIdentifier est garanti de retourner une cell. Il faut juste "register" une classe associée au reuseIdentifier avant (registerClass:forCellIdentifier: / registerNib:forCellIdentifier).
  • CéroceCéroce Membre, Modérateur
    septembre 2012 modifié #5
    Exact, gérer le recyclage des cellules n'est pas nécessaire avec Storyboard.

    D'ailleurs, ce n'est plus non plus nécessaire sous iOS 6 d'après ce que j'ai pu lire.
  • 'AliGator' a écrit:


    Je n'ai jamais utilisé Storyboard personnellement, mais de ce que j'ai cru comprendre ce n'est plus vrai avec StoryBoard : dequeueReusableCellWithIdentifier est garanti de retourner une cell. Il faut juste "register" une classe associée au reuseIdentifier avant (registerClass:forCellIdentifier: / registerNib:forCellIdentifier).




    Oui avant j'avais travaillé avec les NIB et ça marchait nickel avec registerNib.

    il y a pas mal de tutos sur le net qui expliquent comment faire ça, mais bizarrement ça fonctionne pas chez moi.
  • Salut, voici une liste de ce qui pourrait générer l'erreur selon moi.



    - "custom class" non / mal renseigné dans le storyboard

    - la classe de ta cellule personnalisée n'hérite pas de UITableViewCell



    Dans le pire des cas, si c'est une erreur sur laquelle tu a l'impression d'avoir tout bien fait, essaie de refaire (tu supprime la cellule et la recréé)
  • AlakAlak Membre
    septembre 2012 modifié #8
    Ok je ne connaissais pas ces subtilités lié à  storyboard... Merci Ali et Céroce
  • Salut,



    Vu ton bout de code, et tes explications, à  priori ça "devrait" fonctionner.
  • Bizarrement ça marche toujours pas, je vais refaire tout depuis le debut, il se peut que j'ai fait une bêtise :s

    Je vous tiendrai au courant de l'éventuelle erreur, pour que les gens ne tombent pas dans le même piège
  • Re-bonjour,

    Alors, après plusieurs essaies rien n'a fonctionné :s

    J'ai tout simplement ouvert l'ancienne version d'xCode (4.2.1) avec SDK 5.0, et bimm. tout marche à  merveille.



    Alors, est ce que mon application sera compatible iOS 6 ou pas ?
Connectez-vous ou Inscrivez-vous pour répondre.