Ios 在集合视图中展开可选值时意外发现Nil

Ios 在集合视图中展开可选值时意外发现Nil,ios,swift,core-data,uicollectionview,Ios,Swift,Core Data,Uicollectionview,我最近创建了一个新的视图控制器,其中包含一个集合视图。我还必须创建其他也具有集合视图的视图控制器 我面临的问题是,我试图对新的集合视图使用重载函数,但它给出了错误:“致命错误:在展开可选值时意外发现nil。” (lldb)" 关于它产生错误的原因,我的最佳假设是新集合视图的设置与其他两个视图不同(.reloadData()在其他两个视图中工作正常)。以下是新集合视图上viewDidLoad的代码: override func viewDidLoad() { super.viewDidLo

我最近创建了一个新的视图控制器,其中包含一个集合视图。我还必须创建其他也具有集合视图的视图控制器

我面临的问题是,我试图对新的集合视图使用重载函数,但它给出了错误:“致命错误:在展开可选值时意外发现nil。” (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 {
另外,如果这是错误,这是my getData()函数,下面是cellForItemAt和numberOfItemsInSection函数,视图将显示:

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.
}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    getData()
    resultsColl.reloadData()
}
此时将显示以下视图:

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.
}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    getData()
    resultsColl.reloadData()
}

我不知道为什么这个集合视图不能与dataSource、delegate和reloadData()一起使用。如何解决此问题?

如果您不是从代码创建集合视图。。检查您是否在视图控制器中正确连接了集合视图的IBOutlet。我已解决该问题


我不确定是什么导致了它,但我删除了视图控制器中集合视图的声明,并重新添加了IBOutlet,这似乎解决了这个问题。正如@PhillipMills所说,当我添加集合视图时,它可能是零,我认为这是问题的原因。谢谢你的帮助

您可以演示如何声明和初始化导致问题的集合视图吗?请先找出导致错误的行。在Swift错误上设置断点,以便执行将在正确的位置停止。否则,请查看您使用的任何位置
并对其进行更改,这样您就可以测试该值,而不是告诉编译器假定它不是nil。@PhillipMills我已经这样做了,尽管我注释掉了行以查看哪些行导致了问题。导致问题的行是self.resultcoll.delegate/dataSource=self行。此外,reloadData()行也会导致问题,但我假设它与委托和数据源不工作相链接。@PhilippOtto我不确定您的意思,您指的是如何使用CoreData导入集合视图中的项还是常规创建(拖放、集合视图单元格视图控制器等)?@Richard:不,我是指声明和初始化变量ResultColl的行。如前所述,您可以通过interface builder中的插座进行设置。在设置数据源和委托时,是否100%确定已设置ResultColl而不是nil?您是否将outlet变量正确连接到情节提要项?我添加了一个类型为collection view的IBOulet。谢谢你的回复。