将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];
就会失效,取出来的值是错乱的
問題は解決しました。ご自身で答えてください。
その理由は、配列に格納されているセルは本質的にオブジェクトへのポインタであるため、セルを再利用すると、ポインタは再利用前のオブジェクトを指し、取得される値は再利用前のセルの値になります。したがって、値の混乱が発生します。解決するには、セルの各属性を個別に配列に格納するか、セルを再利用するときに事前にモデルを使用して値を再割り当てします。