2017-07-02 65 views
1

我無法將數據從模型傳遞到集合視圖。我已經簡化我的代碼,以一個簡單的項目來說明問題,這是可以在這裏找到:https://github.com/routineCode/collectionViewDataProblem將數據傳遞給collectionView(numberOfItemsInSection)函數(Swift)

這裏是一個圖像顯示所需的結果與當前的代碼實際結果: View Controller output showing Desired vs. Actual Result

我想collectionView(numberOfItemsInSection)函數返回我的[data]數組中的項目數(5),但它返回硬編碼值(3)。通過調試,我意識到這是因爲調用此函數時viewController始終爲零,但我不明白如何解決此問題。我也使用collectionView(cellForItemAt)函數中的[data]數組,並且該函數正常工作,因爲在該函數被調用時viewController不是零。謝謝你的幫助。

回答

0

嘗試reloadData您設置的視圖控制器

lazy var menuBar: MenuBar = { 
    let mb = MenuBar() 
    mb.viewController = self 
    mb.cView.reloadData() 
    return mb 
    }() 

後,順便問一下,你的代碼與內存問題泄露

保留圈

保留圈是當兩個物體具有很強的互相參照,所以沒有人不會釋放。 Here是一個與您的完全相同的保留圈的示例。

在代碼中的ViewController具有很強的參考菜單欄

lazy var menuBar: MenuBar ... 

,菜單欄具有很強的參考視圖控制器

var viewController: ViewController? 

您可以將的viewController屬性設置爲弱,但什麼你給整個ViewController?爲什麼你的menuBar應該知道整個viewController?你可以刪除viewController屬性,並給它一個數據屬性。

let data = [String]() 

,並設置它在你的viewController

lazy var menuBar: MenuBar = { 
    let mb = MenuBar() 
    mb.data = data 
    return mb 
    }() 
+0

您的建議添加的行mb.cView.reloadData()工作。謝謝。 –

+0

關於您的其他意見:我只發佈了足夠的代碼來顯示問題。在我最初的代碼中,有一個像這樣的viewController.scrollToMenuInde​​x(indexPath.item)的函數調用我知道如何進行這樣的調用的唯一方法是使用靜態函數,但是當我嘗試過讓它工作時出現問題。因此,我建議在MenuBar類中使用weak var viewController。再次感謝。 –