버그 수정 #1
Authentication, NavigationView 중복 표시 문제
Authentication
| AuthViewModel > login
before
func login(withEmail email: String, password: String) {
Auth.auth().signIn(withEmail: email, password: password) { result, error in
if let error = error {
print("debug: failed to signin \(error.localizedDescription)")
return
}
guard let user = result?.user else {
return
}
self.userSession = user
print("debug: did log user in")
}
}
새로 로그인을 진행해도 이전의 로그인 정보가 남아있는 문제가 있었다.
UserSession은 교체했지만 관련된 정보를 새로 받아오지 못해서 생기는 문제로 다음과 같이 수정했다.
after
func login(withEmail email: String, password: String) {
Auth.auth().signIn(withEmail: email, password: password) { result, error in
if let error = error {
print("debug: failed to signin \(error.localizedDescription)")
return
}
guard let user = result?.user else {
return
}
self.userSession = user
self.fetchUser()
}
}
이전 과정에서 해당 계정의 데이터를 받아 올 수 있도록 구현했으므로 해당 메서드를 호출해 데이터를 갱신한다.
Authentication
| AuthViewModel > uploadProfileImage
before
func uploadProfileImage(_ image: UIImage) {
guard let uid = tempUserSession?.uid else {
return
}
ImageUploader.uploadImage(image: image) { profileImageUrl in
Firestore.firestore().collection("users").document(uid).updateData(["profileImageUrl": profileImageUrl]) { _ in
self.userSession = self.tempUserSession
}
}
}
이는 계정을 생성하는 과정도 동일한 문제를 가지고 있다.
after
func uploadProfileImage(_ image: UIImage) {
guard let uid = tempUserSession?.uid else {
return
}
ImageUploader.uploadImage(image: image) { profileImageUrl in
Firestore.firestore().collection("users").document(uid).updateData(["profileImageUrl": profileImageUrl]) { _ in
self.userSession = self.tempUserSession
self.fetchUser()
}
}
}
userSession을 업데이트 한 이후 fetchUser 메서드를 호출해 해당 계정의 데이터를 받아 올 수 있도록 수정했다.
NavigationView 중복 표시 문제
| ExploreView
before
struct ExploreView: View {
var body: some View {
NavigationStack {
VStack {
ScrollView {
LazyVStack {
ForEach(0 ... 25, id: \.self) { _ in
NavigationLink {
// ProfileView(user: <#T##User#>)
} label: {
UserRowView()
}
}
}
}
}
.navigationTitle("Explore")
.navigationBarTitleDisplayMode(.inline)
}
}
}
ExploreView에 NavigationView가 중복돼 표시되는 문제가 있었다.
@main
struct twitterClone_SwiftUIApp: App {
@StateObject var viewModel = AuthViewModel()
init() {
FirebaseApp.configure()
}
var body: some Scene {
WindowGroup {
NavigationView {
ContentView()
}
.environmentObject(viewModel)
}
}
}
이는 main에 해당하는 App 파일에서 NavigationView를 사용해 ContentView를 표시하고 있기 때문에
ContentView의 하위 View가 되는 ExploreView가 NavigationView를 다시 표시하면서 발생하는 문제였다.
after
struct ExploreView: View {
var body: some View {
VStack {
ScrollView {
LazyVStack {
ForEach(0 ... 25, id: \.self) { _ in
NavigationLink {
// ProfileView(user: <#T##User#>)
} label: {
UserRowView()
}
}
}
}
}
.navigationTitle("Explore")
.navigationBarTitleDisplayMode(.inline)
}
}
NavigationView만 삭제해 주면 문제는 해결 된다.
'프로젝트 > Twitter Clone App (w∕Firebase)' 카테고리의 다른 글
16. 코드 가독성 개선 (0) | 2023.01.11 |
---|---|
15. 기능구현 #4 (0) | 2023.01.11 |
13. DB와 연결하기 #2 (0) | 2023.01.10 |
12. DB와 연결하기 #1 (0) | 2023.01.05 |
11. 기능 구현하기 #3 (0) | 2022.12.22 |