0

で作成しましUIViewUICollectionView

のインターフェイス宣言では、次のプロトコルUIViewに準拠しています。UICollectionViewDataSourceUICollectionViewDelegate

 @interface TestOverview : UIView <UICollectionViewDataSource, UICollectionViewDelegate>

しかし、アプリを実行するとクラッシュし、次のエラーが表示されます:-

error: -[TestScreenViewController collectionView:numberOfItemsInSection:]: unrecognized selector sent to instance.
  • 明確にするために、メソッドcollectionView:numberOfItemsInSectionUIView(TestOverview) にあり、のデリゲートとして宣言されていUICollectionViewます。では、なぜUIViewController、を含む (TestScreenViewController) でそれを受信することが期待されるUIViewUICollectionViewでしょうか?
4

2 に答える 2

7

まず、View Controller を のデリゲートとして使用した方がよいでしょうUICollectionView。それが彼らの目的です。次に、とプロトコルをTestOverview実装することを宣言する必要があるだけでなく、それぞれのデリゲートとデータ ソースが誰であるかをインスタンスに伝える必要があります。次のようなコードで実行できます。UICollectionViewDataSourceUICollectionViewDelegateUICollectionView

self.collectionView.delegate = self;
self.collectionView.dataSource = self;

または、Interface Builder で、dataSource およびデリゲート項目を にバインドしTestOverviewます。

于 2013-05-25T09:28:31.997 に答える