0

別の UIViewController 内でUICollectionView サブクラスを使用すると...

BrowseCVC *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"];
[self.containerScrollView addSubview:cvc.view];

... コレクション ビューをスクロールするか、セルをタップすると、EXC_BAD_ACCESS でクラッシュします。

ただし、それを ) として宣言し、@property (strong, nonatomic) BrowseCVC *cvc;このように使用すると...

self.cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"];
[self.containerScrollView addSubview:self.cvc.view];

...すべてが機能します。

BorwseCVC非常に単純な構造を持つ目立たない UICollectionViewController サブクラスです。

私の質問は:なぜですか?

4

2 に答える 2

2

ARCはメモリ管理を担当しますが、これらの行では

BrowseCVC *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"];
[self.containerScrollView addSubview:cvc.view];

cvcを保持する必要があることを示唆するものは何もありません。そのビューのみを保持します。cvc の割り当てが解除され、exc_bad_access が取得されます

于 2013-07-24T11:11:02.517 に答える
2

他の人が述べたように、BrowseCVCARCによって割り当てが解除されます。これを回避するには、iVar またはそのプロパティを作成するか、viewController に childViewController として追加します。

BrowseCVC *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"];
[self addChildViewController:cvc];
[self.containerScrollView addSubview:cvc.view];

これは実際には最もクリーンなソリューションです。

于 2013-07-24T11:16:32.460 に答える