Ошибка swift_dynamicCastClassUnconditional runtime

94
8

У меня очень странная ошибка времени выполнения. У меня есть сценарий CollectionViewController в следующем порядке:

Items Controller Scene
Items Controller (class: ItemsController)
ItemCell (class: ItemCell, reuseIdentifier: "ItemCell")
View...

И классы:

class ItemCell : UICollectionViewCell {

@IBOutlet weak var nameLabel: UILabel!

}

class ItemsController : UICollectionViewController {

override func viewDidLoad() {
super.viewDidLoad()

self.collectionView.registerClass(
UICollectionViewCell.self,
forCellWithReuseIdentifier: "ItemCell");

}

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCellWithReuseIdentifier( "ItemCell",
forIndexPath: indexPath) as ItemCell

// ^^ The runtime error points to here

cell.nameLabel.text = "Title";

return cell
}

}

Это не имеет никакого смысла. Что я делаю не так? Я пробовал очистить проект и перекомпилировать, но все равно не работал (обычно это работает в большинстве случаев). Я не хочу переписывать все, чтобы работать (что случилось со мной, и воссоздание Views исправило проблему). Я нахожусь на Xcode 6.1; если здесь нет ошибки, я буду продолжать воссоздать свою раскадровку, но я не хочу этого делать, пока не уверен, что в моем коде нет проблем.

EDIT: Забыл упомянуть об этом. Если я изменю класс от ItemCell до UICollectionViewCell в строке collectionView.dequeueReusableCellWithReuseIdentifier, он, по крайней мере, будет работать. Таким образом, проблема заключается в раскадровке для назначения имени пользовательского класса.

спросил(а) 2015-01-29T13:40:00+03:00 5 лет, 5 месяцев назад
1
Решение
67

Nevermind, нашел проблему. Я забыл изменить имя класса на ItemCell при регистрации класса для вида коллекции:

self.collectionView.registerClass(ItemCell.self, forCellWithReuseIdentifier: "ItemCell")

EDIT: У меня нет большого опыта работы с UICollectionViewController, но я узнал, что если я хочу использовать пользовательский класс, используя вышеприведенную строку, то все IBOutlets будут равны нулю. Поэтому удаление этой строки устраняет проблему.

ответил(а) 2015-01-29T13:48:00+03:00 5 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема