【问题标题】:Error message : Unexpectedly found nil while implicitly unwrapping an Optional value? [duplicate]错误消息:在隐式展开可选值时意外发现 nil? [复制]
【发布时间】:2021-08-22 14:24:40
【问题描述】:

我一直在尝试使用情节提要从 UICollectionView 中的 JSON 文件填充数据。创建网点后,我将图像和标签连接到 UICollectionViewCell.swift,将 Collection View 连接到 UICollectionView。但是,我收到一个错误,

在隐式展开 Optional 值时意外发现 nil:文件 Music2/ViewController.swift,第 22 行。

第 22 行下面指向“collectionView.dataSoure = self”

 override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.dataSource = self

    parseJson()

  } 

之后,我解析了我的 JSON 文件并在 pasreJson() 的末尾添加了一个“DispatchQueue.main.async”(不确定部分)。这会造成问题吗?

//JSON

private func parseJson(){
    guard let path = Bundle.main.path(forResource: "data (1)", ofType: "json") else {
        return
    }
   
    
    let url = URL(fileURLWithPath: path)
    do{
        let jsonData = try Data(contentsOf: url)
    let userData = try JSONDecoder().decode(UserData.self, from: jsonData)

        
        albums = userData.albums
        playlists = userData.playlists
        

    }catch{
        print("error : \(error)")
    }
    DispatchQueue.main.async {
        self.collectionView.reloadData()
          }
       }
    }

这是我完整的视图控制器:

   class ViewController: UIViewController, UICollectionViewDataSource {


   @IBOutlet weak var collectionView : UICollectionView!


   //INSTANCE OF JSON DATA
   var albums = [Album]()
    var playlists = [Playlist]()

      override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.dataSource = self

    parseJson()

     }
    //UICollectionView protocols
      func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection 
     section: Int) -> Int {

    return albums.count
     }

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCell", 
    for: indexPath) as! CollectionViewCell
    
    cell.Label.text = albums[indexPath.row].title.capitalized
   
    return cell
    }



//JSON
    private func parseJson(){
    guard let path = Bundle.main.path(forResource: "data (1)", ofType: "json") else {
        return
    }
   
    
    let url = URL(fileURLWithPath: path)
    do{
        let jsonData = try Data(contentsOf: url)
    let userData = try JSONDecoder().decode(UserData.self, from: jsonData)

        
        albums = userData.albums
        playlists = userData.playlists
        

    }catch{
        print("error : \(error)")
    }
    DispatchQueue.main.async {
        self.collectionView.reloadData()
          }
         }
      }

【问题讨论】:

  • 再一次,你为什么要在viewDidLoad下加载数据?
  • 你能给我解释一下吗@el

标签: json swift uicollectionview storyboard uicollectionviewcell


【解决方案1】:

如果您在collectionView.dataSource = self 线上崩溃,那么您没有将集合视图连接到情节提要中的视图控制器。打开你的故事板并从集合视图控制拖动到视图控制器。

【讨论】:

    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多