ストーリーボード (iPad) で を含むビューを定義しました。UICollectionView
ビューの下部には もありUIToolbar
ます。に、Core-Plot Graph (クラス) である別のビューを含む(クラスによって実装された)UICollectionView
を追加しました。UICollectionViewCell
iPadCellCollectionViewCell
CPTGraphHostingView
と を実装する X というクラスがUICollectionViewDelegate
ありUICollectionViewDataSource
ます。
クラス X では、( のViewDidLoad
) ビューの各セルに対して Core-Plot Graph を作成し、次のコードを使用して、グラフを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;
}
正常に動作しています。すべてのグラフが画面に正しく表示されています。この問題は、ユーザーがビューをスクロールすると、1 つまたは複数のセルが「空白」になるときに発生します。理由が本当にわかりません。
Interface Builder にを追加する代わりに、回避策を見つけました。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;
}
このコードでは、すべてが正常に機能しています。IBに を追加CPTGraphHostingView
しているときに機能しない理由について説明はありますか?UICollectionViewCell
メソッドが呼び出されるたびに「addSubview」を呼び出すのは問題ですか? メモリリークはありませんか?