Intereting Posts
Разрешить все mimetype в запросе GET Прикосновения полностью потеряны (нет касанийBegan или touchEnded) UIImageView не центрирован после вращения Как узнать информацию о сети и использовать ее в ios sdk Минимальная высота UITableViewCell с автоматически изменяющимися размерами ячеек Проблема сокета ios Socket Линейная интерполяция с GL_FLOAT и GL_LUMINANCE? boundingRectWithSize: не учитывает настройки lineBreakMode Не удалось загрузить приложение в App Store (операция iTunes Store завершилась с ошибкой) Попросил разработать приложение iphone, которое использует GPS-навигацию – реалистичные ожидания? Mapview с панелью инструментов, как по умолчанию карта iphone Как создать глобальную переменную среды, доступ к которой можно получить с помощью SpringBoard или других приложений на iPhone с джейлбрейком? Программирование iOS, создание телефонных звонков как отключить вертикальную прокрутку, когда пользователь прокручивает по горизонтали? Изменить управление страницей с помощью кнопки

CollectionView dataSource не работает при использовании UICollectionViewController, но работает при использовании UIViewController с CollectionView

Я подклассифицирую UICollectionView и забочусь о его dataSource . Я назначаю dataSource для self во время фазы init CollectionView.

 import Foundation import UIKit class CollectionViewSubclass: UICollectionView, UICollectionViewDataSource { public override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) { super.init(frame: frame, collectionViewLayout: layout) dataSource = self } public required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) dataSource = self } public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { // This is called for the first case, but not the second return 1 } public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { // This is called for the first case, but not the second return UICollectionViewCell() } } 
  • Случай 1: когда я использую CollectionViewSubclass внутри UIViewController , все работает хорошо, и оба метода numberOfItemsInSection ( numberOfItemsInSection и cellForItemAt правильно.
  • case 2: когда я использую CollectionViewSubclass внутри UICollectionViewController , по какой-то причине методы dataSource не вызывают, хотя, когда я отлаживался, я проверял, что init(coder:) был действительно вызван, а dataSource = self был выполнен. Но кажется, что каким-то образом dataSource снова получил нуль на более позднем этапе, поэтому методы dataSource не вызываются.

Я не могу обойти это, и я попытался отладить, но безрезультатно. Любая помощь, чтобы рассказать мне причину, или дать мне идеи для отладки, которые ценятся. Благодаря!

Edit : Когда я назначаю dataSource = self после этапа init , все работает хорошо. Но я предпочел бы сделать это на этапе init . Как я могу заставить его работать во время init ?

Solutions Collecting From Web of "CollectionView dataSource не работает при использовании UICollectionViewController, но работает при использовании UIViewController с CollectionView"

Из документов UICollectionViewConrtoller :

При загрузке представления коллекции из файла раскадровки или nib, источник данных и объекты-делегаты для представления коллекции получаются из файла nib. Если источник данных или делегат не указан, контроллер представления коллекции присваивает себя неопределенной роли.

Поэтому, если вы используете UICollectionViewConrtoller вам необходимо переназначить dataSource для своего пользовательского набора.