Не могу отобразить данные из массива (JSON) в моем collectionView - PullRequest
1 голос
/ 09 июня 2019

Я супер новичок в Свифте (учусь пару недель) и извините за мой английский.я не знаю, как избежать проверки метода "cellForItemAt indexPath".Я пытался играть с refreshingControl, но он не работает.Я получил ошибку в строке «let arry = arrayOfData [indexPath.row] // <- здесь есть ошибка: фатальная ошибка: индекс вне диапазона».Если я прокомментирую эту строку, все работает нормально (и refreshControll).Мой arrayOfData пуст, когда collectionView пытается загрузить, если продолжить (когда я отлаживаю), в конце концов я получу мои данные из arrayOfData (его данные из JSON).Но компилятор не будет проверять этот метод снова (если я попробую проверить isRefresh true для false). </p>

class ViewController: UIViewController {

    @IBOutlet weak var collectionView: UICollectionView!

    private var isRefreshing = true
    var arrayOfData = [GettingMoney]()


    override func viewDidLoad() {
        super.viewDidLoad()
        let refreshControl = UIRefreshControl()
        refreshControl.tintColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
        collectionView.refreshControl = refreshControl
        collectionView.refreshControl?.beginRefreshing()
        fetchData()

        collectionView.dataSource = self
        collectionView.delegate = self

    }

    func fetchData () {
        let url = "SOMEAPI"
        guard let urlString = URL(string: url) else { return }

        URLSession.shared.dataTask(with: urlString) { (data, _, _) in
            guard let data = data else { return }

            do {

                let getData = try JSONDecoder().decode(GettingMoney.self, from: data)
                print("getSomeData")

                DispatchQueue.main.async {
                    self.arrayOfData = [getData]
                    self.collectionView?.reloadData()
                    self.collectionView.refreshControl?.endRefreshing()
                    print("reload Data")
                }

            } catch {
                print("Its a error")
            }
            }.resume()
    }

}

extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 3
    }

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

        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCellId", for: indexPath) as? CollectionViewCell {

            let arry = arrayOfData[indexPath.row] // <-- here is got error: Fatal error: Index out of range
            print("is Ok")
            cell.currectCurrency.text = "\(arry.USD))"
            print(arrayOfData)

            return cell
        }

        return UICollectionViewCell()
    }
}

1 Ответ

1 голос
/ 09 июня 2019

Обновление numberOfItemsInSections, как показано ниже,

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.arrayOfData.count
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...