2016-10-25 63 views
0

我在Swift3中構建了一個Keyboard擴展。無法退出類型視圖:UICollectionElementKindCell從後臺返回後

我的鍵盤第一次啓動,沒問題,我的集合視圖顯示正確無誤,一切正常。

當我的鍵盤轉到背景並在前景中再次返回時,會發生此錯誤。例如,我推出的iMessage,顯示我的鍵盤,敲擊在我的iPhone的「home鍵」,再次推出的iMessage - >崩潰:

終止應用程序由於未捕獲的異常「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出隊在cellForItemAt indexPath的KeyboardViewCell時:

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

如果您符合相同的協議不止一個「委託方」(即超過一個ColletionView),你必須實現這個檢查每個回調方法。

+0

感謝您的回覆。這是一個好主意,但它不起作用,因爲它總是去「其他」 –

+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 clause',這樣它就不會再崩潰了。然後你就可以調試實際顯示的內容和原因。 – shallowThought

+0

好吧,我想我明白了,我將實施您的解決方案,並對代碼進行一些更改以使其工作。 –

+0

很高興聽到。快樂的編碼。 – shallowThought

相關問題