bugfix: 플레이리스트 데이터 정렬 문제 수정 by kybeen · Pull Request #293 · boostcampwm-2024/iOS06-molio

문제 상황

플레이리스트 상세화면의 플레이리스트 음악 순서가 불러올 때마다 일정하지 않고 뒤죽박죽인 상태

image.png

Simulator Screen Recording - iPhone SE (3rd generation) - 2024-12-02 at 03.33.58.gif

원인

플레이리스트 화면의 음악 데이터는 다음과 같이 불러와진다.

func getMusic(with isrcs: [String]) async -> [MolioMusic] {
    return await withTaskGroup(of: MolioMusic?.self) { group in
        var musics: [MolioMusic] = []
        for isrc in isrcs {
            group.addTask {
                return await getMusic(with: isrc)
            }
        }
        
        for await music in group {
            if let music {
                musics.append(music)
            }
        }
        return musics
    }
}

Core Data에서 불러온 플레이리스트 음악 데이터(isrc)를 출력해봤을 때, 저장된 데이터의 순서는 항상 일정하게 불러와지고 있었다.

image.png

즉, 원인은 isrc값을 통해 MusicKit의 음악 데이터를 불러오는 곳에 있었다.

func getMusic(with isrcs: [String]) async -> [MolioMusic] {
    return await withTaskGroup(of: MolioMusic?.self) { group in
        var musics: [MolioMusic] = []
        for isrc in isrcs {
            group.addTask {
                return await getMusic(with: isrc)
            }
        }
        
        **/*
        로딩이 완료된 음악 데이터는 비동기적으로 musics 배열에 추가되기 때문에
        순서가 보장되지 않는다.
        */
        for await music in group {
            if let music {
                musics.append(music)
            }
        }**
        
        return musics
    }
}