objective-c - iOS关于NSMutableArray保存UITableViewCell对象后,cell取值出现错乱,请问什么原因?
PHP中文网
PHP中文网 2017-04-17 17:44:27
0
1
393

将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中文网

认证高级PHP讲师

répondre à tous(1)
巴扎黑

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal