Почему мое табличное представление показывает только около 20 моих элементов из массива? - PullRequest
0 голосов
/ 21 апреля 2019

Мое приложение неправильно отображает все элементы в моем массиве. Что является причиной этого?

    var songamount = ["Refresh Page"]
    var songImageAmount = [MPMediaItemArtwork]()

    override func viewDidLoad() {
        super.viewDidLoad()
        MPMediaLibrary.requestAuthorization { (status) in
            let myPlaylistQuery = MPMediaQuery.playlists()
            let playlists = myPlaylistQuery.collections
            self.songamount.remove(at: 0)
            for playlist in playlists! {
                print(playlist.value(forProperty: MPMediaPlaylistPropertyName)!)

                let songs = playlist.items
                for song in songs {
                    let songTitle = song.value(forProperty: MPMediaItemPropertyTitle)
                    let songImage = song.artwork
                    self.songamount.append(songTitle as! String)
                    self.songImageAmount.append(songImage!)
                    print("\t\t", songTitle!)

            }
            print(self.songamount)
            print("Song Amount:\(self.songamount.count)")
            print("Image Amount: \(self.songImageAmount.count)")


            }
        }
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return songamount.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "LibraryCell", for: indexPath) as! LibraryCell
        cell.LibraryTitle.text = songamount[indexPath.row]
        //cell.LibraryImage.image = songImageAmount[indexPath.row]
        print(indexPath)

        return cell

    }
}

Это мой код для отображения всех песен в пользовательской библиотеке Itunes, но он отображает только 20 элементов из массива в tableView.

Обновление - у меня получилось правильно составить список всех моих песен, но он показывает только 33 из них в списке. Вот обновленный код

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var TextDebug: UILabel!

    var songamount = ["Please Reload View"]
    var songImageAmount = [MPMediaItemArtwork]()

    override func viewDidLoad() {
        super.viewDidLoad()
        MPMediaLibrary.requestAuthorization { (status) in
            let mySongQuery = MPMediaQuery.songs()
            let songs = mySongQuery.collections
            self.songamount.remove(at: 0)
            for song in songs! {
                print(MPMediaItemPropertyTitle)

                let songs = song.items
                for song in songs {
                    let songTitle = song.value(forProperty: MPMediaItemPropertyTitle)
                    //let songImage = song.artwork
                    self.songamount.append(songTitle as! String)
                    //self.songImageAmount.append(songImage!)
                    print("\t\t", songTitle!)

            }
            print(self.songamount)
            print("Song Amount:\(self.songamount.count)")
            //print("Image Amount: \(self.songImageAmount.count)")


            }
        }
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return songamount.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "LibraryCell", for: indexPath) as! LibraryCell
        cell.LibraryTitle.text = songamount[indexPath.row]
        //cell.LibraryImage.image = songImageAmount[indexPath.row]
        let sections: Int = tableView.numberOfSections
        var rows: Int = 0

        for i in 0..<sections {
            rows += tableView.numberOfRows(inSection: i)
            TextDebug.text = "\(rows)"
        }


        return cell

    }

1 Ответ

1 голос
/ 22 апреля 2019

Решением моей проблемы было добавление tableView.reloadData() к концу viewDidLoad()

...