메인페이지에서 셀의 아이템이 랜덤으로 배치되는 현상?

사진을 추가하고, 메인 페이지로 이동했을 때는 마지막으로 추가한 사진이 맨 앞에 있다. 하지만 다른 페이지로 전환했다가 다시 돌아왔을 때는 해당 사진이 다른 위치에 있는 경우가 간혹 발생했다.

아래 스크린샷을 보면 우리가 사진의 이미지를 추가할 때 문서의 ID를 랜덤으로 부여하고 생성한다. 이 때, 어떤 문제가 발생할까?

스크린샷 2023-11-06 오전 1.49.19.png

문서는 숫자, 영대문자, 영소문자 오름차순으로 생성된다. 만약 마지막으로 생성한 문서의 ID가 숫자 1로 시작한다면, 문서의 맨 앞에 생성될 것이고 문서의 ID가 소문자 a로 시작한다면 문서의 맨 마지막에 생성된다.

그래서 문서의 ID를 순차적으로 만들 수 있도록 인덱스를 부여해봤다. 문서가 없는 경우 ID는 1000부터 시작하고, 그 다음 생성되는 문서는 +1 씩 증가하는 인덱스를 갖게된다.

스크린샷 2023-11-06 오전 2.07.51.png

아래와 같이 코드를 작성했고, 문서를 생성하는 곳(AddPhotoVC)에서 newPhotoDocumentID 값을 사용해서 인덱스 번호를 부여한다.

// FirestoreManager.swift
var newPhotoDocumentID: String? {
    guard let id = self.photoList.first?.id else { return String(1000) }
    guard let index = Int(id) else { return String(1000) }
    return String(index + 1)
}

<aside> 💡 인덱스가 1000부터 시작하는 이유 인덱스 1 ~ 9를 갖는 문서를 생성하고, 10을 생성할 때 맨 위에 문서를 생성한다. 문서 ID를 숫자로 인식하는게 아니라 문자열로 인식하기 때문에 그런 것 같다. 좀 더 알아봐야할 것 같다.

</aside>

그리고 Photo 문서를 업데이트할 때, 식별할 수 있도록 문서ID와 동일한 값을 입력받는 id필드를 생성했다.

스크린샷 2023-11-06 오전 2.08.33.png

기존에는 documentRefernce 를 저장하는 필드가 있었는데, 해당 필드를 id로 변경했다.

스크린샷 2023-11-06 오전 2.21.01.png