Я определил в своей раскадровке (iPad) представление, содержащее UICollectionView
, в нижней части окна также есть UIToolbar
.
В UICollectionView
я добавил UICollectionViewCell
(реализован классом iPadCellCollectionViewCell
), который содержит другое представление, которое является графиком ядра (класс CPTGraphHostingView
).
У меня есть класс под названием X, который реализует UICollectionViewDelegate
и UICollectionViewDataSource
.
В классе X я строю для каждой ячейки моего представления (в ViewDidLoad
) график ядра и у меня есть следующий код для привязки графика к ячейке UICollectionViewCell
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"ChartCollectionId";
iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
MyChart* chart = [_charts objectAtIndex:indexPath.row];
cell.hostingView.hostedGraph = chart.barChart;
return cell;
}
Он работает нормально, все мои графики правильно отображаются на экране. Проблема возникает, когда пользователь просматривает представление, затем одна или несколько ячеек становятся "пустыми". Я действительно не понимаю, почему.
Я нашел обходное решение, вместо добавления CPTGraphHostingView
в UICollectionViewCell
в построителе интерфейса, я сам его создаю, а предыдущий код становится:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"ChartCollectionId";
iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
[cell.contentView addSubview:[_hostingViews objectAtIndex:indexPath.row]];
return cell;
}
С помощью этого кода все работает нормально. Есть ли объяснения, почему он не работает, когда я добавляю CPTGraphHostingView
в UICollectionViewCell
с IB?
Является ли проблема вызова "addSubview" при каждом вызове метода? Нет утечек памяти?