inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)

40. 프로필뷰, 프로필 편집뷰의 ViewModel 만들기

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

해결된 질문

168

랑프_Langpeu

작성한 질문수 21

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

답변 3

1

밤낮 코딩

안녕하세요 랑프님

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

ContentView파일에

        if AuthManager.shared.currentAuthUser == nil {

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

        if AuthManager.shared.currentUser == nil {

이렇게 바꿔주세요

이게 로그인할 때

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

 

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

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

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

0

랑프_Langpeu

감사합니다.

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

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

0

밤낮 코딩

안녕하세요 랑프님!

제보 감사드립니다.

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

0

인프런 AI 인턴

안녕하세요, 인프런 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

60

2

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

0

79

2

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

1

71

2

Thread number가 다 1로 나옵니다

1

69

2

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

1

69

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

135

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

135

2

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

1

134

2

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

1

301

3

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

1

217

3

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

1

166

2

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

0

106

2

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

1

296

2