삽질 이야기
[SwiftUI] List의 ForEach에서 FetchedResult 데이터 삭제 시 딜레이 현상
_히처리_
2023. 9. 15. 14:45
List에서 행의 인덱스가 필요해서 다음과 같이 코드를 작성했다.
struct PrayersView: View {
...
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Prayer.name, ascending: true)],
animation: .default)
private var items: FetchedResults<Prayer>
var body: some View {
List {
ForEach(items.indices, id: \.self) { index in
NavigationLink(destination: {
PrayerDetailView(items: items, startIndex: index)
}, label: {
Text(items[index].getName())
.padding(.vertical)
})
코드만으로는 딜레이가 발생하는 원인을 알 수 없어서 코드를 하나씩 변경해가면서 확인했다.
원인은 ForEach에서 id를 사용해서 발생하는 문제였다.
그래서 인덱스를 구하는 메서드를 만들어서 아래와 같이 코드를 수정하니 잘 작동했다.
var body: some View {
List {
ForEach(items) { item in
NavigationLink(destination: {
PrayerDetailView(items: items, startIndex: getIndex(prayer: item))
}, label: {
Text(item.getName())
.padding(.vertical)
})