UITableView numberOfSections调用了很多次,但只有一次reloadData

时间:2019-07-25 21:06:54

标签: swift uitableview

我的UIViewController首次初始化时,我遇到了奇怪的行为。在我的viewWillAppear函数上,我进行了填充和数组设置,并为UITableView重新加载了数据。我遇到的问题是,第一次重载数据时,numberOfSections被调用了4次。

下次调用viewWillAppear时,numberOfSections将执行一次。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    getInternalAlbumArrayAndReload()


}

其中

private func getInternalAlbumArrayAndReload(){

    var internalAlbumArrayTemp = [FileInternalAlbumHeader]()

    let appFileManager = AppFileManager.shared
    let internalExportedMusicURL = appFileManager.appInternaltExportedMusic

    do{

        /** Get artists URLs */
        let artistArray = try appFileManager.fileManager.contentsOfDirectory(at: internalExportedMusicURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
        for artistItem in artistArray{

            /** Get albums URLs for an artist **/
            let albumArray = try appFileManager.fileManager.contentsOfDirectory(at: artistItem, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
            for albumItem in albumArray{

                /** Get tracks URLs for an album **/
                let trackArray = try appFileManager.fileManager.contentsOfDirectory(at: albumItem, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
                for trackItem in trackArray{

                    if AppHelper.isValidFormat(url: trackItem){

                        let albumURL = trackItem.deletingLastPathComponent()
                        let albumName = albumURL.lastPathComponent

                        let artistUrl = albumURL.deletingLastPathComponent()
                        let artistName = artistUrl.lastPathComponent

                        if let albumHeaderIndex = internalAlbumArrayTemp.firstIndex(where: {$0.artistName == artistName && $0.albumName == albumName}){
                            internalAlbumArrayTemp[albumHeaderIndex].urlTrackArray.append(AlbumInternalTrack(url: trackItem))
                        }
                        else{
                            /** Does not exist **/
                            let newInternalHeader = FileInternalAlbumHeader(artistName: artistName, albumName: albumName, url: albumURL)
                            newInternalHeader.urlTrackArray.append(AlbumInternalTrack(url: trackItem))
                            internalAlbumArrayTemp.append(newInternalHeader)
                        }

                    }

                }

            }

        }

    }
    catch{
        print("\(logClassName) Error: Unable to get content")
    }

    /* Copy content for updating Expanded status */
    for internalAlbum in internalAlbumArray{

        for internalAlbumTemp in internalAlbumArrayTemp{

            if internalAlbum.artistName == internalAlbumTemp.artistName && internalAlbum.albumName == internalAlbumTemp.albumName{

                internalAlbumTemp.isSelected = internalAlbum.isSelected

            }

        }

    }

    internalAlbumArray.removeAll()
    for internalAlbumTemp in internalAlbumArrayTemp{

        internalAlbumTemp.urlTrackArray.sort {
            return $0.trackName < $1.trackName
        }

        internalAlbumArray.append(internalAlbumTemp)

    }

    exportsTableView.reloadData()

}

这个问题的原因是因为我面临着我从未在应用程序中见过的崩溃:

crash 有什么想法吗?

0 个答案:

没有答案