recherche

Maison  >  Questions et réponses  >  le corps du texte

objective-c - iOS关于NSMutableArray保存UITableViewCell对象后,cell取值出现错乱,请问什么原因?

将UITableViewCell对象cell添加进NSMutableArray后,后续取值时,cell的textLable的text属性出现错乱,与cell本来的textLable的text不同,这是什么原因造成的呢?

比如:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString * timeRing = @"ring";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:timeRing];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:timeRing];
    }else{
        while ([cell.contentView.subviews lastObject]!=nil) {
            [[cell.contentView.subviews lastObject] removeFromSuperview];
        }
    }
    
    cell.accessoryType = UITableViewCellAccessoryNone;
    
    if (self.cellArray.count<self.ringArray.count) {
        
        
        self.timeRingItem = self.ringArray[indexPath.row];
        cell.tintColor = [UIColor redColor];
        cell.textLabel.text= self.timeRingItem.ringName;
        [self.cellArray addObject:cell];
    }
    else{
        
        cell = self.cellArray[indexPath.row];
     
    }
    
    return  cell;
}

这种情况下cell = self.cellArray[indexPath.row];就会失效,取出来的值是错乱的

PHP中文网PHP中文网2811 Il y a quelques jours390

répondre à tous(1)je répondrai

  • 巴扎黑

    巴扎黑2017-04-17 17:46:27

    Le problème a été résolu, veuillez y répondre vous-même.
    La raison est que la cellule stockée dans le tableau est essentiellement un pointeur vers l'objet lorsque la cellule est réutilisée, le pointeur pointe vers l'objet avant la réutilisation, et la valeur obtenue est la valeur de la cellule avant la réutilisation. Par conséquent, une confusion de valeurs se produira. La solution consiste à stocker chaque attribut de la cellule dans un tableau séparément, ou à utiliser un modèle à l'avance pour réaffecter la valeur lors de la réutilisation de la cellule.

    répondre
    0
  • Annulerrépondre