위의 사진으로 상황전체를 판단하기는 어렵지만… 질문과 함께 곁들입니다 ㅠ
갖은 디버깅을 다 사용하다가 결국 원시적인 프린트로 이니셜라이저에 문제가 있다는 것을 알았습니다.
(이니셜라이저는 debug flag도 안먹네요…)
문제는 로그아웃 후에 처음으로 앱이 구동되었을 때, firstCard 라는 프로퍼티에 저렇게 의도적으로 card를 넣어줘도 nil 값을 반환합니다.
중지 후에 다시 재실행하면 정상적으로 작동합니다… 참고로 Card는 class로 만들었고 서버에서 dictionary도 다 정상적으로 들어옵니다.
질문이 충분한지 모르겠는데, 답답한 마음에 올립니다 ㅠ 어떻게 하면 될까요? 제가 모르는 이니셜라이저의 주의할점이 있을까요?
좋아요 1
해결했습니다… 사용자 정의 initializer 사용시에 옵셔널로 선언된 프로퍼티값은 나중에 값을 넣어줄 수 있기 때문에 Post 오브젝트 생성시에 선언해서 넣어줬습니다.
좀 논의나 질문을 이어가고 싶은 점은 옵셔널로 선언한 프로퍼티를 사용자 정의 이니셜라이즈로 초기화 하려고 할 때 어떤 제약이 있는건가요?
좋아요 1
초기화 문제는 , 실행시 오브젝트가 생성되는 시점을 주의깊게 다뤄야 합니다.
저 스트럭(클래스?)의 초기화시에 이미 CardManager.shared 가 만들어져 있고 그 안에 cards 어레이에 인스턴스들이 들어가는 코드가 실행되는 것을 보장할 수 있어야 합니다.
이 부분은 디버그 모드에서 단계별 실행을 해 볼 수 있을꺼예요.
저렇게 .shared 로 싱글턴 패턴으로 만든 인스턴스의 경우, 앱의 실행시 가장 먼저 만들어지는 오브젝트에서 한 번 호출해 주면 좋아요.
좋아요 1
아핫 그렇군요… 그래서 계속 nil 값을 반환했던거군요 ㅠ 앱의 흐름상 CardManager가 Post를 인스턴스화하기 전에 호출된적이 없습니다; 유념해서 사용해야겠습니다:) 감사합니다.
좋아요 2