2017-04-09 7 views
-1

最近コレクションビューを持つ新しいビューコントローラを作成しました。コレクションビューも持つ他のビューコントローラーにも必要です。コレクションビューでオプションの値をアンラッピングしている間に予期せずNilが見つかりました

私が直面しています問題は、私は新しいコレクションビューのためリロード機能を使用しようとしていますが、それは誤りを与えることである:「致命的なエラー:オプションの値 をアンラップしながら、予想外にnilを見出した(lldb」)

なぜ私は、エラーが発生するのは、新しいコレクションビューが他の2つ(.reloadData()が他の2つでうまく機能する)とは異なる設定であるということです。これは、新しいコレクションビュー上のviewDidLoadのためのコードです:

override func viewDidLoad() { 
    super.viewDidLoad() 

    //self.resultsColl.delegate = self 
    //self.resultsColl.dataSource = self 

    testHashAt = textFieldFHash.text! 
} 

ことが主なエラーですので、私は、デリゲートとデータソースの行をコメントアウト。他の2つのView Controllerでは、これらの2つの機能があり、完全に動作しますが、新しいコレクションビューでそれらを使用すると、.reloadData()で行ったのと同じエラーが発生します。

私はこれが理由で、私が.reloadData()関数を使用できないと考えています。私は、データソースとデリゲートの両方として、クラス宣言でビューコントローラにコレクションビューを追加しました:

class HashtagViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 

もちょうど包み、これは、エラーであるこれは私のgetData()関数であり、それはcellForItemAtとnumberOfItemsInSection機能である下回りますそして、viewWillAppear:

func getData() { 

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

    do { 
     let fetchRequest: NSFetchRequest<Task> = Task.fetchRequest() 
     fetchRequest.predicate = NSPredicate.init(format: "hashtag = %@", testHashAt); 
     taskTwo = try context.fetch(fetchRequest) 
    } 

    catch { 
     print("Get Data failed") 
    } 

    // Fetches data. 
} 

とcellForItemAtとnumberOfItemsInSection:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return taskTwo.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let taskTHash = taskTwo[indexPath.row] 

    let cellHash = collectionView.dequeueReusableCell(withReuseIdentifier: "nCell", for: indexPath) as! HashCollectionViewCell 


    if testHashAt == taskTHash.hashtag { 
     cellHash.labelFHash.text = taskTHash.name! 
    } 
    else { 
     print("blank cell?") 
    } 

    if cellHash.labelFHash.text == "" { 
     print("cell is nil") 
    } 

    cellHash.layer.cornerRadius = 25 

    return cellHash 
} 

とviewWillAppear:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    getData() 
    resultsColl.reloadData() 
} 

このコレクションビューがdataSource、delegate、およびreloadData()で機能しない理由はわかりません。どうすればこの問題を解決できますか?

+0

問題の原因となるコレクションビューを宣言して初期化する方法を教えてください。 –

+0

まず、エラーの原因となっている行を特定します。実行が適切な場所で停止するように、Swiftエラーにブレークポイントを設定します。それ以外の場合は、代入で '!'を使用する場所を見て、コンパイラに値がゼロではないと仮定するのではなく、値をテストするように変更します。 –

+0

@PhillipMillsどのような問題が発生しているのかを調べるための行をコメントアウトしましたが、私はそれを行いました。問題の原因となっている行は、self.resultsColl.delegate/dataSource = self行です。また、reloadData()行は問題を引き起こしますが、デリゲートと連動していて、データソースが機能していないと想定しています。 – Richard

答えて

0

あなたは、私が問題を解決し、あなたのビューコントローラ

+0

タイプコレクションビューのIBOuletを追加しました。レスポンスありがとう。 – Richard

0

にあなたのコレクションビューの正しいIBOutletを接続するかどうかを確認してください。..コードからコレクションビューを作成していない場合。

何が原因であるかわかりませんが、ビューコントローラのコレクションビューの宣言を削除し、IBOutletを再追加して問題を修正したようです。 @PhillipMillsが述べたように、私が追加したときにコレクションビューが無かったのかもしれないが、それが問題の原因だと思うかもしれない。助けてくれてありがとう!

関連する問題