Maison > Questions et réponses > le corps du texte
将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];
就会失效,取出来的值是错乱的
巴扎黑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.