2017-04-09 61 views
-1

我最近創建了一個新的視圖控制器,其中包含一個集合視圖。我也有其他視圖控制器,也有收集意見。在集合視圖中展開可選值時意外發現零

我現在面臨的問題是,我想使用重載函數爲新收集的看法,但它給了錯誤:「致命錯誤:意外發現零而展開的可選值 (LLDB)」

我最好的假設,爲什麼它會給出錯誤的是,新的集合視圖設置不同於其他兩個(.reloadData()在其他兩個罰款)。這是在新的集合視圖中的viewDidLoad代碼:

override func viewDidLoad() { 
    super.viewDidLoad() 

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

    testHashAt = textFieldFHash.text! 
} 

我註釋掉的委託和數據源線,因爲這是主要的錯誤。在另外兩個視圖控制器中,我有這兩個函數,並且他們工作得很好,但是當我在新的集合視圖中使用它們時,我得到了與.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

如果不創建從代碼集合視圖。檢查如果您連接您的收藏觀正確IBOutlet中在您的視圖控制器

+0

我添加了一個類型集合視圖的IBOulet。感謝您的迴應。 – Richard

0

我解決了這個問題。

我不確定是什麼導致了它,但我刪除了視圖控制器中集合視圖的聲明,並重新添加了IBOutlet,並且似乎解決了這個問題。正如@PhillipMills所說的那樣,當我添加它時,收集視圖可能是零,我認爲這是問題的原因。謝謝您的幫助!

相關問題