UITableView défilement Application se bloque

Préface: je suis nouveau sur le SDK de l'iPhone, l'Obj-C, Interface Builder et le Cacao. Je suis susceptible de faire quelque chose évidemment faux.

Question:
J'ai un UITableView qui se bloque si je la faire défiler. Faire défiler un peu de révéler l'intégralité de la cellule du fond de la plupart des demi-cellule cachée, mais ne se charge pas de la suivante. De même, si je défilent en haut pour bien cacher le fond de la plupart des cellules, et des bandes de caoutchouc arrière pour montrer que la cellule, il tombe en panne avant de le montrer. Cela me semble bizarre car c'est le dessin de la première 7 de 11 cellules correctement. Les données de la cellule est dans un NSArray, dans un UITableViewController lié à la fois la dataSource et delegate pour la UITableView dans Interface Builder. Il fonctionne lorsque la vue initialise.

Je suis en train de faire une Application, j'ai pensé que je pourrais être fait avec 2 jours il ya que juste calcule les combinaisons et affiche une liste de ce que je pensais serait une pratique de défilement de la vue de la table. Maintenant, il n'a même pas calculer tout, le NSArray dans le DataSource est initialisée une fois avec des chaînes comme @"Hello" et @"World".

Étapes pour reproduire:
Parce que je suis à l'aide de l'IB, je ne peux pas vraiment vous montrer l'intégralité de l'article dans le code. Donc, je vais vous décrire ce que j'ai fait jusqu'à présent et j'espère qu'il ne vous rend pas somnolent.

Fait un nouvel Onglet "Barre d'Application" dans Xcode, parce que je veux 2 onglets, et je ne veux pas d'une barre de navigation, ni un plein écran de la table. J'ai déplacé le MainWindow.xibpremier onglet vue sur FirstView.xib comme un analogue de la SecondView.xib. Cela a fonctionné à merveille. J'ai modifié le point de vue de contenir deux UITextFields pour les entrées, et un UITableView pour la sortie. Cela a fonctionné, mais la table était vide. Je sous-classé le UITableViewController où j'ai remplie un NSArray propriété nommée combinations avec 11 cordes, et ensuite ajouté

//Set up the cell...
cell.userInteractionEnabled = NO;
cell.text = [combinations objectAtIndex:indexPath.row];

où il y a eu uniquement le commentaire. Dans IB, j'ai ajouté un Table View Controller à la FirstView.xib et définir le nom de classe pour correspondre au nom de cette nouvelle sous-classe et de contrôle-traîné le Table View de mon point de vue sur cette Combinations Table View Controller deux fois. Une fois la liaison la dataSource et une fois le delegate. Bien que je reçois le même comportement si seulement le dataSource est lié.

Cela fonctionne et remplit la table de lignes visibles (6.5) avec les 7 premières valeurs de la dataSource combinations. Je peut de défilement de 0,5 cellules vers le bas, puis vers le haut. Mais si je défiler plus de 0,5 cellules vers le haut ou vers le bas l'application crash. L'explication dans le rapport se lit comme suit:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -[NSCFTimer tableView:cellForRowAtIndexPath:]:
unrecognized selector sent to instance 0x52ca40'

Je n'ai pas fait un NSCFTimer je n'ai d'ailleurs le lien de mon Table View, je soupçonne que l' cellForRowAtIndexPath est exactement un message qui aurait dû à mon dataSource ou delegate donc je ne comprends pas pourquoi il s'est égaré et où il a fini.

Mise à jour: Merci pour les réponses et les commentaires. Mon problème semble être que la CombinationsTableViewController (sous-classe de UITableViewController) est en fait pas instancié une place particulière dans mon code. Il est créé comme un certain temps (quand le FirstView.xib est chargé), et est apparemment réussi même si la première tableView est rempli avec 7 cellules, et est alors libérée. J'ai donc besoin d'identifier où/comment faire une retenue de référence à ce contrôleur. Mon Application Delegate devrait probablement avoir une certaine prise qui détient ce contrôleur qui peut être lié à l'instance qui est dans le xib. Ouais, je suis nouveau sur ce. Je sais que je pourrait simplement éliminer ces problèmes en évitant de l'IB et de faire les choses de manière explicite dans le code, mais je me dis que je veux apprendre à utiliser l'IB de manière flexible.

Enfin: Oui, j'avais besoin d'une retenue instance de la table view controller. Il semble élémentaire, mais ce n'était pas évident lorsque l'on travaille avec le bureau international, que j'ai eu. Lire mon propre post pour l'ensemble du processus et de fixer.

De côté: Soit le débogueur besoins des instructions détaillées (tous les liens apprécié), ou qu'il ne fonctionne pas très bien. Je semble pour obtenir plus d'informations, plus rapidement, en laissant l'Application crash et la lecture du rapport qu'il génère. Mais cela nécessite un fastidieux de résiliation, la relance, et en 3 clics. J'avais vraiment envie de continuer sur cette de câblage des entrées, en faisant le calcul, et la mise à jour de la table à chaque changement. C'est censé être la partie la plus difficile, de ne pas ce faire un cadre membre des travaux de trucs.

Plus de la randonnée: C'était tous dans le SDK de l'iPhone pour 2.2.1. Au moment de l'iPhone OS 3.0 non-bêta n'était pas encore disponible, sans rejoindre le club pour de l'argent comptant dur froid. Je m'attendais à l'ouverture de la WWDC 2009, mais c'était en fait aujourd'hui (17 juillet 2009) que le public et gratuit de l'3.0 SDK a été mis à disposition.

Avez-vous réglé votre UITableView délégué à votre contrôleur d'application?

OriginalL'auteur dlamblin | 2009-06-14