사진을 추가하고, 메인 페이지로 이동했을 때는 마지막으로 추가한 사진이 맨 앞에 있다. 하지만 다른 페이지로 전환했다가 다시 돌아왔을 때는 해당 사진이 다른 위치에 있는 경우가 간혹 발생했다.
아래 스크린샷을 보면 우리가 사진의 이미지를 추가할 때 문서의 ID를 랜덤으로 부여하고 생성한다. 이 때, 어떤 문제가 발생할까?
문서는 숫자, 영대문자, 영소문자 오름차순으로 생성된다. 만약 마지막으로 생성한 문서의 ID가 숫자 1
로 시작한다면, 문서의 맨 앞에 생성될 것이고 문서의 ID가 소문자 a
로 시작한다면 문서의 맨 마지막에 생성된다.
그래서 문서의 ID를 순차적으로 만들 수 있도록 인덱스를 부여해봤다. 문서가 없는 경우 ID는 1000부터 시작하고, 그 다음 생성되는 문서는 +1 씩 증가하는 인덱스를 갖게된다.
아래와 같이 코드를 작성했고, 문서를 생성하는 곳(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
필드를 생성했다.
기존에는 documentRefernce
를 저장하는 필드가 있었는데, 해당 필드를 id
로 변경했다.