inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Phần 2: Bản sao Instagram iOS dành cho người mới bắt đầu-trung cấp (SwiftUI, MVVM, Firebase, 2024)

40. Tạo ViewModel cho View Profile và View Chỉnh sửa Profile

40. 강에서 정상작동 안합니다.

Đã giải quyết

168

icopy

21 câu hỏi đã được viết

0

40 번 강의에 따라

iOS 18.2
Xcode 16.2

아래 처럼 작성하고 실행 했는데

class ProfileViewModel {
    var user: User?
    var name: String
    var username: String
    var bio: String
    
    
    init() {
        let tempUser = AuthManger.shared.currentUser
        self.user = tempUser
        self.name = tempUser?.name ?? ""
        self.username = tempUser?.username ?? ""
        self.bio = tempUser?.bio ?? ""
    }

 

프로필 name,bio,username 이 노출이 안됩니다.

ProfileViewModel 의 init() 함수에 로그를 찍어 봤는데

2번 호출이 되고 있습니다.

nil 로 한번 후에 auth 값 들어온후에 한번 실행되는데

이미 ProfileView 가 로드가 되어 있어서 업데이트가

안되는듯 합니다.

 

-- 확인 부탁드립니다. --

Simulator Screenshot - iPhone 16 Pro 18.2 - 2024-12-28 at 16.38.51.png.webp

 

강의소스로 테스트시에도 동일 증상 이었습니다
(9-4ViewModel로 데이터 관리 - 소스로 테스트)

스크린샷 2024-12-28 오후 4.51.00.png.webp


ios firebase swiftui mvvm

Câu trả lời 3

1

nightdaycoding

안녕하세요 랑프님

해당 문제 원인을 찾았습니다.

ContentView파일에

        if AuthManager.shared.currentAuthUser == nil {

이렇게 currentAuthUser로 로그인을 판단하던 부분을

        if AuthManager.shared.currentUser == nil {

이렇게 바꿔주세요

이게 로그인할 때

currentAuthUser가 세팅되고 그 후에 currentUser가 세팅되는데
그 사이에 profileViewModel이 세팅되어서 빈값들이 화면에 세팅되는거 같습니다.

 

비슷한 문제를 56강에서 같은 해결법으로 수정하는데요. 그 강의도 참고 부탁드리겠습니다.

xcode 15에서는 발생하지 않았는데 xcode 16에서 나타난 문제 같아요

관련해서 강의 다시 찍어서 업로드 하도록 하겠습니다. 감사합니다!

0

icopy

감사합니다.

말씀 하신대로 하니 해결 되었습니다.

다만, 로그인창이 떳다가 메인 화면으로 넘어가는
이슈가 있네요. 아무래도 중간에 인트로 화면을
노출 했다 빼주는 로직이 있어야 할듯 합니다.
ㅠ.ㅠ

0

nightdaycoding

안녕하세요 랑프님!

제보 감사드립니다.

확인해서 답변드리도록 하겠습니다~

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

강의에서 말씀하신 문제는 초기화 지연과 관련된 사항인 것 같습니다. ProfileViewModel 클래스가 두 번 초기화되면서 초기화 시점에 user 데이터를 적절히 받을 수 없고, 따라서 name, username, bio도 표시되지 않는 것 같습니다. 이는 currentUser가 nil 값인 상태에서 초기화가 먼저 이루어지고, 이후에 정상적인 값이 들어오기 때문일 수 있습니다.

해결 방안으로는 ProfileViewModel에서 user 데이터를 비동기적으로 받거나, SwiftUI의 @State, @StateObject, @ObservedObject 등을 활용하여 데이터 바인딩을 사용하는 것이 좋습니다. 이를 통해 뷰의 상태가 변경될 때마다 UI가 자동으로 업데이트되도록 할 수 있습니다.

기존 질문과 유사한 질문 및 해결 방법에 대한 자료들을 공유합니다:

  1. \@Bindable VS \@Environment + \@Bindable 문제 해결 예시

    • 이 게시물에서는 @Environment@Bindable 사용 시 발생할 수 있는 문제와 어떻게 직접적인 데이터 바인딩을 통해 문제를 해결할 수 있는지를 설명합니다.
  2. @State와 @Bindable의 사용 차이점 설명

    • @State, @Bindable 사용 시 각각의 역할과 데이터 처리를 어떻게 해야 하는지에 대해 설명하고 있습니다.

이러한 접근 방식을 통해 ProfileView가 업데이트되지 않는 문제를 해소할 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

searchable이 화면 하단에 위치해요

0

62

2

warning 하나가 있는 것 같습니다. 해결방법좀 알려주세요

0

79

2

설계 관련하여 참고할 문서나 예제 공유가 가능할까요?

1

72

2

Thread number가 다 1로 나옵니다

1

69

2

'loadAllPosts' 를 매번 사용해야 하나요?

1

70

2

75강 실시간으로 팔로우수 안늘어나는 이유?

1

135

3

예전코드도 배워야 할까요?

1

137

1

ProfileView에서 toolbar이용시 문제점 발생, 로직이 이해가 되지 않습니다.

0

161

1

62강 Follow, Unfollow기능구현에서,,

0

107

2

애구마선생님, 다음 프로젝트 강의는 언제 올려주세요???

0

108

2

51강 10:22에서 이미지 여러장이 나오지 않아요;;

0

108

2

52강 post데이터가 불러와지지 않아요,,,

0

136

2

ViewModel과 Model 구분 (30강)

1

133

2

바인딩하는 이유

1

94

2

75강 까지 마무리후 소스 오류 사항 문의

0

109

1

SwiftUI main actor 관한 경고 계속 뜹니다.

1

245

2

45강의 에서 Kingfisher 사용후 발생하는 swift6 이슈

1

152

2

19강에서 Encoder()를 사용할 수 없습니다.

1

136

2

프로필 수정 후 변경된 내용을 피드에 바로 반영되도록 하고 싶습니다.

1

134

2

15강에서 발생한 문제에 대해서 질문이 있습니다!

1

301

3

13강 코드 작성 후 피드의 유저 데이터가 보이지 않는 문제

1

218

3

혹시 다음 강의 대략 언제쯤 완료되시는지 알 수 있을까요??

1

167

2

섹션7 뷰 리팩토링 질문있습니다.

0

107

2

firebase에서 데이터를 불러오는데 오류가 발생합니다.

1

297

2