Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iOS] UITableViewController CellForRowAtIndexPath

'UITableView dataSource must return a cell from tableView:ce

    7 juin 2012 à 0:10:36

    Bonjour !

    J'ai un problème avec mon UITableViewController. En fait, j'ai pratiquement copier/coller le code de mon application iPad dans une classe mon application iPhone, mais maintenant ça me dit que je dois retourner une cellule avec la méthode CellForRowAtIndexPath (ce qui est logique). En debuggant, je m'aperçois que la cellule que je retourne est nulle. Pourtant, c'est le même code utilisé dans mon application iPad et j'ai même utilisé cette "façon" de faire avec un autre UITableView dans mon application iPhone et ça fonctionne. J'ai très bien mis mes Identifier pour chacune de me cellule custom. Est-ce qu'il peut y avoir une autre raison pourquoi cela me donne cette erreur ?

    Voici l'erreur et le code :

    Merci de m'aider !

    2012-06-06 17:52:52.477 HomeAutomationsIphoneApps[5350:f803] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:6072
    2012-06-06 17:52:52.477 HomeAutomationsIphoneApps[5350:f803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
    *** First throw call stack:
    (0x13d3052 0x1564d0a 0x137ba78 0x9b32db 0xc3ee3 0xc4589 0xafdfd 0xbe851 0x69301 0x13d4e72 0x1d7d92d 0x1d87827 0x1d0dfa7 0x1d0fea6 0x1d0f580 0x13a79ce 0x133e670 0x130a4f6 0x1309db4 0x1309ccb 0x12bc879 0x12bc93e 0x2aa9b 0x267d 0x25e5 0x1)
    terminate called throwing an exception(lldb)


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        Devices *myDevice = [[cellArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row ];
        CGRect frame = CGRectMake(0, 0, 320, 44);
        UIView *backView = [[UIView alloc] initWithFrame:frame];
        backView.backgroundColor = [UIColor lightGrayColor];
        
        if ( [myDevice.category isEqualToString:@"Sensor"]) {
            SensorCell *sensorCell = [tableView dequeueReusableCellWithIdentifier:@"SensorCell"]; // Par exemple ici on me donne une adresse pour sensorCell
            
            sensorCell.title.text = myDevice.displayName;  //Mais l'adresse est remis a 0x0000000 ici
            sensorCell.subtitle.text = myDevice.description;
            sensorCell.backgroundView = backView;
            return sensorCell;
            
        }
        else if( [myDevice.category isEqualToString:@"Appliance"]){
            ApplianceCell *applianceCell = (ApplianceCell *)[self.tableView dequeueReusableCellWithIdentifier:@"ApplianceCell"];
            
            applianceCell.title.text = myDevice.displayName;
            applianceCell.subtitle.text = myDevice.description;
            applianceCell.deviceName = myDevice.name;
            applianceCell.ip = login.server;
            [requests requestGetDeviceStatus:login.server :myDevice.name];
            if ( requests.value == [NSNumber numberWithInt:0]){
                [applianceCell.aSwitch setOn:NO animated:NO];
            }
            else if (requests.value == [NSNumber numberWithInt:1]) {
                [applianceCell.aSwitch setOn:YES animated:NO];
            }
            else if (requests.value == [NSNumber numberWithInt:-1]){
                NSLog(@"The device does not exists - GetDeviceStatus");
            }
            else{
                NSLog(@"Uncommon response - GetDeviceStatus");
            }
            
            applianceCell.backgroundView = backView;
            return applianceCell;
        }
        else if ([myDevice.category isEqualToString:@"Lamp"]){
            
            LampCell *lampCell = (LampCell *)[self.tableView dequeueReusableCellWithIdentifier:@"LampCell"];
            
            lampCell.title.text = myDevice.displayName;
            lampCell.subtitle.text = myDevice.description;
            lampCell.deviceName = myDevice.name;
            lampCell.ip = login.server;
            
            [requests requestGetDeviceStatus:login.server :myDevice.name];
            if ( requests.value == [NSNumber numberWithInt:0]){
                [lampCell.aSwitch setOn:NO animated:NO];
            }
            else if (requests.value == [NSNumber numberWithInt:1]) {
                [lampCell.aSwitch setOn:YES animated:NO];
            }
            else if (requests.value == [NSNumber numberWithInt:-1]){
                NSLog(@"The device does not exists - GetDeviceStatus");
            }
            else{
                NSLog(@"Uncommon response - GetDeviceStatus");
            }
            
            if ( 0 <= [myDevice.level intValue] <= 100 ){
                
                [lampCell.slider setValue: [myDevice.level floatValue]];
                lampCell.pourcentage.text = [NSString stringWithFormat:@"%i%%", [myDevice.level intValue]];
            }
            else if ([myDevice.level intValue] == -1){
                NSLog(@"The device does not exists");
            }
            else{
                NSLog(@"Uncommon level of the device");
            }
            lampCell.backgroundView = backView;
            return lampCell;
        }
        else {
            
            UITableViewCell *cell=[[UITableViewCell alloc]  initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
            
            
            //Add the Bg Image to the cell
            
            
            
            
            //Add the Label
            UILabel *cellTitle=[[UILabel alloc]initWithFrame:CGRectMake(15, 7, 663, 30)];
            [cellTitle setBackgroundColor:[UIColor clearColor]];
            [cellTitle setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
            [cellTitle setTextColor:[UIColor darkGrayColor]];
            [cellTitle setText:myDevice.displayName];
            [cell.contentView addSubview:cellTitle];
            return cell;
        }
        
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      7 juin 2012 à 0:17:38

      Tu as biens mis les bonnes customCells dans le storyboard? "SensorCell" par exemple
      • Partager sur Facebook
      • Partager sur Twitter
        7 juin 2012 à 16:56:18

        Citation : Horiel

        Tu as biens mis les bonnes customCells dans le storyboard? "SensorCell" par exemple



        Oui, J'ai mon UITableViewController en lien avec ma classe DevicesVieController. Dans le storyboard, dans mon UITableView du UITableViewController "DevicesViewController", j'ai mes trois cellules customs avec chacun leur Identifier et leur classe associer. C'est très bizarre que sa me donne cette erreur, j'essaie de voir si j'ai oublier de faire quelque chose mais je ne trouve pas :S

        EDIT :

        Je vien d'essayer de initialiser une UITableViewCell a défaut comme ceci, mais sa ne fonctionne pas non plus ! Donc mon problème est ailleurs ?!

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Test"];
                cell.textLabel.text = myDevice.displayName;
                return cell;
        


        EDIT 2 :

        Sa me met un warning dans le storyboard : Unsupported Configuration Scene is unreachable due to lack ...
        Est-ce que sa rapport ? J'ai un ViewController qui push dans un UITableViewController "LocationViewController" qui lui dans la méthode de sélection de row fait un
        pushToView DevicesViewController ... donc je n'ai pas lié mes deux UITableViewController dans le storyboard. C'est peut-être ça le problème?

        La methode didSelectRowAtIndexPath de LocationViewController

        - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
        {
            if([self.tableView indexPathForSelectedRow ].row == 0){
                detailObject = @"All Locations"; 
                [devicesViewController setDetailItem:detailObject];
                [self.navigationController pushViewController:devicesViewController animated:YES];
            }
            else{
                Locations *selectedLocation = (Locations *)[self.locations.locationList objectAtIndex:[self.tableView indexPathForSelectedRow].row];  
                
                
                detailObject = selectedLocation;
                
                [devicesViewController setDetailItem:detailObject];
            }
            
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          7 juin 2012 à 18:17:58

          Et tu as quoi dans tes classes de UIVIewCell? J'ai l'impression que tu ne retourne rien
          • Partager sur Facebook
          • Partager sur Twitter

          [iOS] UITableViewController CellForRowAtIndexPath

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown