我最近創建了一個新的視圖控制器,其中包含一個集合視圖。我也有其他視圖控制器,也有收集意見。在集合視圖中展開可選值時意外發現零
我現在面臨的問題是,我想使用重載函數爲新收集的看法,但它給了錯誤:「致命錯誤:意外發現零而展開的可選值 (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()。我怎麼解決這個問題?
您能否請您說明如何聲明並初始化導致問題的收集視圖? –
從找出哪條線路導致錯誤開始。在Swift錯誤上放置一個斷點,以便執行將停在正確的位置。否則,在賦值中查看任何你使用'!'的地方並改變它,以便測試該值,而不是告訴編譯器假定它不是零。 –
@PhillipMills我已經做到了,儘管我已經註釋掉了行,看看哪些行爲會引發問題。引起問題的行是self.resultsColl.delegate/dataSource = self行。 reloadData()行也會導致問題,但我認爲它與委託和數據源不能正常工作。 – Richard