2017-07-02 18 views
1

モデルからコレクションビューにデータを渡す際に問題があります。私はここで利用可能であるという問題点を説明するための簡単なプロジェクトに私のコードを簡素化しました:私はしたい View Controller output showing Desired vs. Actual ResultcollectionView(numberOfItemsInSection)関数(Swift)にデータを渡す

:ここhttps://github.com/routineCode/collectionViewDataProblem

現在のコードと実際の結果対望ましい結果を示す画像でありますcollectionView(numberOfItemsInSection)関数はmy [data]配列内のアイテム(5)の数を返しますが、代わりにハードコードされた値(3)を返します。デバッグを行うと、この関数が呼び出されたときにviewControllerが常にnilであることがわかりますが、問題を回避する方法がわかりません。また、collectionView(cellForItemAt)関数で[data]配列を使用すると、関数が呼び出された時点でviewControllerがnilではないため、正常に動作します。助けてくれてありがとう。

答えて

0

あなたがところでViewControllerを

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

を設定した後reloadDataに試してみてください、あなたのコードは、メモリの問題は

は、2つのオブジェクトが強いていたときに円がある保持円を保持リークしています互いを参照するので、決して割り当てを解除することはできません。 Hereは、自分のものとまったく同じ固定円の例です。コード内で

のViewControllerはmenuBarを

lazy var menuBar: MenuBar ... 

への強い参照を持っており、メニューバーは、あなたが弱いのがViewControllerプロパティを設定しますが、何のためにできるのViewController

var 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)のような関数呼び出しがあります。私はそのような呼び出しを行う方法を知っている唯一の方法は静的関数を使用していますが、 。そのため、私は弱いvar viewControllerをMenuBarクラスで使用するようあなたの提案をしました。再度、感謝します。 –

関連する問題