J'essaie de remplir une vue modifiable avec plusieurs sections. Voici mon code:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
case 1:
[[cell textLabel] setText:[usersTeachers objectAtIndex:(indexPath.row+1)]];
return cell;
break;
J'obtiens cette erreur lorsque j'essaie de charger la vue:
2009-12-28 21:09:48.380 FSS[2046:207] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit/UIKit-984.38/UITableView.m:4709
2009-12-28 21:09:48.381 FSS[2046:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
Le tableau à cet index se connecte en tant que chaîne légitime, mais il ne renvoie pas correctement la cellule. Ainsi, il ne se charge pas au-delà de ce point. Veuillez aider.
Il me semble que vous avez un boîtier de commutation partiellement visible où il renvoie une cellule pour le cas 1. Votre erreur me fait penser que vous renvoyez une branche null UITableViewCell
some dans votre boîtier de commutateur.
Assurez-vous que tous les chemins hors de ce cas de commutateur renvoient un objet UITableViewCell
valide.
Que renvoyez-vous pour le cas 0? En d'autres termes, que renvoyez-vous pour la première ligne demandée par UITableView?
Voici un exemple de code de l'un de mes projets, il pourrait vous donner un bon point de départ pour voir où vous vous trompez:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSInteger section = [indexPath section];
switch (section) {
case 0: // First cell in section 1
cell.textLabel.text = [collectionHelpTitles objectAtIndex:[indexPath row]];
break;
case 1: // Second cell in section 1
cell.textLabel.text = [noteHelpTitles objectAtIndex:[indexPath row]];
break;
case 2: // Third cell in section 1
cell.textLabel.text = [checklistHelpTitles objectAtIndex:[indexPath row]];
break;
case 3: // Fourth cell in section 1
cell.textLabel.text = [photoHelpTitles objectAtIndex:[indexPath row]];
break;
default:
// Do something else here if a cell other than 1,2,3 or 4 is requested
break;
}
return cell;
}
Vous ne renvoyez probablement pas de cellule pour indexPath.row == 0 (votre 'cas 1' est suspect ...). Mais je ne peux pas dire à moins que vous ne publiez l'intégralité de votre déclaration de changement.
Essayez de renvoyer "cellule" en dehors de votre instruction switch, vous comprendrez mieux ce qui se passe. Vous n'aurez alors pas d'échec d'assertion.
Vérifiez que vous avez
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
dans
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Ok, si toutes les autres solutions pour cette question ne fonctionnent pas, assurez-vous que l'identifiant de cellule pour la cellule de la vue tableau (dans le storyboard) correspond à l'identifiant de cellule que vous utilisez dans votre code tableviewdelegate:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CustomCell";
L'identifiant de cellule dans votre storyboard doit être "CustomCell" pour correspondre à ce code.
Je ne sais pas pourquoi vous avez le "cas 1:" assis tout seul, mais si c'est un cas AUTRE que 1, cela va échouer et tout ce qui vient après sera retourné. Assurez-vous de toujours renvoyer une cellule.