프로젝트 진행 중에 ViewController에 있는 Collection View Cell에 각 label 마다 데이터를 넘겨줘야 하는데 ..
하나의 메소드에서 URL를 통해 JSON데이터를 가져오고 난 뒤에 ViewController에서 전역변수 설정 후 그 변수에 저장해주고 print
를 해주면 nil
, []
이 나온다..
viewDidLoad, viewDidApper 등 여러 메소드들을 써봤지만 해결점이 나지 않았다.
데이터 저장하는 부분에 비동기적으로 걸어보았지만 결과는 똑같았다 🤔🤯
결과적으로 해결한 방법
-> 직접해결하진 못했지만 DispatchSemaphore
를 써서 해결했다.
데이터를 저장하는 부분에 signal()
끝나는 부분에 wait()
를 걸어 해당 구역이 끝날 떄까지 기다리라는 것을 명시해주었다. (아래의 코드처럼)
func setData() {
jsonParser.dataTask(by: URLCollection.productListInquery, completion: { (response) in
switch response {
case .success(let data):
self.productData = data
self.URLSemaphore.signal()
case .failure(let data):
print(data)
}
})
URLSemaphore.wait()
}
해결방법이 정확히 맞는? 좋은? 방법인지 모르겠으나, 일단 원하는데로 동작을 한다!!
먼가 혼자 머릿속으로 생각했었는데 실제로 구현을 해볼껄 그랬다.. 솔직히 귀찮아서(안될줄알고) 실제로 테스트 안해본 결과가 큰 것 같다.
프로젝트 시작 시 코드 vs 스토리보드 생각 많이 했는데 이번 프로젝트는 스토리보드로 했는데..
스토리 보드로 한 이유??
그동안 프로젝트를 코드로만 해서.. 단지 그 이유
어떤게 더 좋은 방법인지 생각해보다가 서로 장단점이 명확해서 블로그를 찾아봤는데
아래 블로그에서 명확하게 정리해 두었다.. 이제부터 코드?를 중점적으로 해봐야 할듯하다..
https://trilliwon.medium.com/storyboard-vs-code-510afb519d45
위의 블로그의 내용을 정리하자면 좋은 방식은 Code
로 하는게 좋다
애플도 대부분의 UI는 코드로 작성되어 있다.
이번 프로젝트에서 꺠달음.. 자료가 코드가 훨씬 많음