【问题标题】:Multiple collectionviews in one Viewcontroller causes Index out of range error一个 Viewcontroller 中的多个 collectionview 导致 Index out of range 错误
【发布时间】:2018-12-21 21:46:53
【问题描述】:

我尝试在一个视图控制器中使用三个集合视图。我像以下方法所示解析数据: 在底部,我根据位置将数据添加到右侧列表(这部分有效)

 func getEventData(eventIDs: [String], plz: String, positiona: Int){


        for eventId in eventIDs {
        let ref = Database.database().reference().child("Events").child(plz).child(eventId)
         ref.observe(.value, with: { snapshot in
            let item = snapshot.value as? [String: AnyObject]
            let eventName = item?["name"] as! String
            let date = item?["date"] as! String
            let lat = item?["lat"] as! String
            let lng = item?["lng"] as! String
            let infos = item?["additionalInfos"] as! String
            let position = item?["position"] as! String
            let ts = item?["ts"] as! Int
            let createdBy = item?["createdBy"] as! String

         let timestamp = NSDate().timeIntervalSince1970
            if (ts > Int(timestamp)) {
                let eo = EventObject(eventID: eventId, eventName: 
   eventName, info: infos, createdBy: createdBy, date: date, lat: lat, lng: lng, position: position, ts: ts)
                if positiona == 0{
                    self.acceptedEvents.append(eo)
                    self.acceptedEventscv.reloadData()

                }else if positiona == 1{
                    self.myEvents.append(eo)
                    self.myEventscv.reloadData()

                }else if positiona == 2{
                   self.storedEvents.append(eo)
                self.storedEventscv.reloadData()
                }
            }

         })
        }
    }

在我的 NumbersofItemsInSection 方法中,我执行了以下操作:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if collectionView == self.acceptedEventscv{
    return acceptedEvents.count
    }else if collectionView == self.storedEventscv{
        return storedEvents.count
    }else if collectionView == self.myEventscv{
        return myEvents.count
    }else{
        return 0
    }
    }

在我的 CellForRowAtItem 方法中,我尝试了以下方法

func collectionView(_ collectionView: UICollectionView, 
 cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
 if collectionView == self.acceptedEventscv{
 let cell = 
  collectionView.dequeueReusableCell(withReuseIdentifier: 
"acceptedEventsCell", for: indexPath) as! 
 acceptedEventsCollectionViewCell
 let eo = acceptedEvents[indexPath.row]
  cell.eventName.text = eo.eventName

  let items = eo.date!.components(separatedBy: " ")//Here replase 
  space with your value and result is Array.
 //Direct line of code
 //let items = "This is my String".components(separatedBy: " ")
 let date = items[0]
let time = items[1]
cell.date.text = date
cell.time.text = time

getUserNameAge(label: cell.usernameAge)
return cell
}else {
  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "savedEventsCell", for: indexPath) as! savedEventsCollectionViewCell
  let eo = acceptedEvents[indexPath.row]
  cell.eventName.text = eo.eventName

  let items = eo.date!.components(separatedBy: " ")//Here replase space with your value and result is Array.
  //Direct line of code
  //let items = "This is my String".components(separatedBy: " ")
  let date = items[0]
  let time = items[1]
  cell.date.text = date
  cell.time.text = time


  getUserNameAge(label: cell.usernameAge)

  return cell
}

}

问题是,如果我在第二个 CollectionView 中有更多项目,我总是会收到此错误:

线程 1:致命错误:索引超出范围

在这行代码:

let eo = acceptedEvents[indexPath.row]

【问题讨论】:

    标签: ios swift uicollectionview


    【解决方案1】:

    cellForItemAt也一定是这样的

    if collectionView == self.acceptedEventscv{
      let item = acceptedEvents[indexPath.row]
       ----
      return cell
    }else if collectionView == self.storedEventscv{
        let item = storedEvents[indexPath.row]   
        ----
        return cell
    }else {
         let item = myEvents[indexPath.row] 
         ----
         return cell  
    }
    

    在您的情况下,现在发生的情况是,在 numberOfItemsInSection 中返回的计数可能不同的两种情况下,您都访问了相同的数组 acceptedEvents

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2013-04-27
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多