2016-10-25 6 views
0

Я строю расширение клавиатуры в Swift3.Не удалось удалить из вида вид: UICollectionElementKindCell после возврата с фона

В первый раз, когда моя клавиатура запускается, никаких проблем, мой просмотр коллекции отображается juste fine, все работает.

Эта ошибка возникает, когда моя клавиатура переходит в фоновый режим и возвращается обратно на переднем плане. Например, я запускаю Шеззаде, показывать мою клавиатуру, нажмите на кнопку «домой» моего iPhone, запустите Шеззаде снова -> аварии:

, истекающий приложение из-за неперехваченного исключением «NSInternalInconsistencyException», причина: «не может из очереди вида рода: UICollectionElementKindCell с идентификатором KeyboardViewCell - необходимо зарегистрировать перо или класс для идентификатора или подключения ячейки прототипа в раскадровке»

Вот как я могу установить раскадровку для моего идентификатора ячейки:

Cell identifier

С правого класса:

Cell class

А вот как я называю это из cellForItemAt indexPath метода:

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! KeyboardViewCell 
     return cell 

Я не понимаю, почему этот сбой после изменения клавиатуры, как там это не раскадровка, загруженная в этом случае или что-то еще ... Я что-то забыл?

Мой раскадровки как это:

enter image description here

enter image description here

ответ

1

Ваш KeyboardViewController имеет два UICollectionView с. Убедитесь, что MyCollectionView зовут его dataSource когда освобождение пакета из очереди на KeyboardViewCell в cellForItemAt indexPath:

if collectionView === myCollectionView { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! KeyboardViewCell 
    return cell 
} else { 
    //dequeue soundCollectionViewCell 
} 

Если в соответствии с тем же протоколом более одного «доверителя» (то есть более чем один ColletionView), вы должны осуществить это проверьте каждый метод обратного вызова.

+0

Спасибо за ваш ответ.Это хорошая идея, но она не работает, потому что она всегда идет на «else». –

+0

Я отвечаю на свой вопрос, чтобы отформатировать ответ. –

+0

Это еще одна проблема, которую вы можете отлаживать сейчас. – shallowThought

0

Хорошо странная вещь, я пытался напечатать, что:

print("-------------", collectionView, "----------------", self.myCollectionView, "---------------" , self.soundCollectionView) 

и печать дал:

UICollectionView: 0x160817e00; --------------- UICollectionView: 0x160817e00; -------------- UICollectionView: 0x160817e00;

по печати, это, кажется, что, когда приложение переходит от фона, CollectionView является self.soundCollectionView, но это не с тем, кто отображается, может быть, я мог бы заставить его установить в качестве self.myCollectionView?

+0

Я предполагаю, что как collectionViews находятся внутри вашего ViewController, так и оба они вызывают dataSource. это поведение, которое я бы тоже ожидал. Внесите предложение 'if'' else из моего ответа, чтобы он больше не разбился. Затем вы можете отлаживать то, что на самом деле показано и почему. – shallowThought

+0

Ок, я думаю, я понимаю, я собираюсь реализовать ваше решение и внести несколько изменений в свой код, чтобы он работал. –

+0

Рад слышать. Счастливое кодирование. – shallowThought