滚动后NSMutableArray Datasrouce TableView UI冻结

时间:2016-08-01 17:57:44

标签: ios objective-c uitableview

我正在使用XCode版本8.0开发iOS 10。

在我的.h文件中,我有

@property (nonatomic, strong) NSMutableArray *items;

这是我的TableView的数据源。

在viewDidLoad中,我调用了我的函数[self setupTableViewItems];

self.items = [[NSMutableArray alloc] initWithCapacity:4];
self.items = [CellModel rows];

此数组中的每个对象都代表我的单元格,例如:

CellModel *screenshot = [[CellModel alloc]
                            initWithParams:         @"Screenshot"
                            subTitle:               @"Select a screenshot"
                            image:                  [UIImage imageNamed: @"screenshot"]
                            viewName:               Pictures
                            section:                3];

这是方法签名,

+ (NSMutableArray *)rows;

和重要的实现细节(每个对象都是CellModel类型):

NSMutableArray *screenshots = [[NSMutableArray alloc] initWithCapacity:3];
[screenshots addObject:quickScreenshot];
[screenshots addObject:selectScreenshot];
[screenshots addObject:selectedScreenshotsCollectionView];

.....

NSMutableArray *dataSource = [[NSMutableArray alloc] initWithCapacity:4];
[dataSource addObject:interactions];
[dataSource addObject:screenshots];
[dataSource addObject:problem];
[dataSource addObject:details];

return [dataSource mutableCopy];

tableView第一次正确加载数据,视图看起来很棒,没有任何遗漏。

当我开始滚动时,我立即注意到单元格的附件视图开始混淆,特别是在第3节,它们被定义为没有一个附加视图,但仍然混淆并获得其他单元格的附件视图。

然而,一旦方向改变,或者我开始上下滚动几次,UI就会被锁定,没有崩溃,没有来自XCode的消息。记忆力正在增长,这显然是一个泄漏,但在试图找到它几个小时后,我很绝望。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
GenericTableViewCell *cell = [tableView
                                  dequeueReusableCellWithIdentifier:REPORT_CELL
                                  forIndexPath: indexPath];

CellModel *current = [[self.items objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];


cell.titleLabel.text = current.title;
cell.subtitleLabel.text = current.subTitle;
cell.icon.image = current.image;

    if(indexPath.section == 0 && indexPath.row == 0)
        cell.accessoryView = self.lastInteractionSwitch;
    else if(indexPath.section == 0 && indexPath.row == 1)
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    else if(indexPath.section == 1 && indexPath.row == 0)
        cell.accessoryView = self.lastScreenshotSwitch;
    else if(indexPath.section == 1 && indexPath.row == 1)
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    else if(indexPath.section == 2 && indexPath.row == 0)
        cell.accessoryView = self.starRatingView;
    else if(indexPath.section == 2 && indexPath.row == 1)
        cell.accessoryView = self.speechToTextButton;
    else cell.accessoryView = UITableViewCellAccessoryNone;
return cell;

我的自定义单元格有三个属性,即正在设置的属性。自定义单元格的类型为“Subtitle”,属性在IB中连接。

首先,我认为这是因为我没有指针引用,添加它,尝试使用非常明显的(强||保留),继续使用NSArray作为数据源,同样的问题。改变了细胞(100%苹果,100%定制),同样的问题。

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

单元格行的高度是多少。?

您是否也检查过该对象的第3节数据?

CellModel *current = [[self.items objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
cell.titleLabel.text = current.title;
cell.subtitleLabel.text = current.subTitle;
cell.icon.image = current.image;