我的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()
}
这个问题的原因是因为我面临着我从未在应用程序中见过的崩溃: