TableView & Codable

안녕하세요! Source 코드는 아래에 올렸습니다.

https://github.com/easyutilsdev/QandA

1. Cell lable 질문 in stampDetailTableView.swift

(a) self.tableView.cellForRow(at: IndexPath(row:0, section: 0))?.detailTextLabel?.text = modelStampCard.goal
(b) cell0.detailTextLabel?.text = modelStampCard.goal

outlet 을 만들어서 label.text를 지정하는 (b)는 잘 되는데
(a)가 동작을 하지 않아서 뭘 고쳐야할지 의문입니다.

2.Codable 연습 중 입니다. stampCardModel.swift

json 파일 내용을 swift 파일 내용 안에 직접 넣고 핸들링하는 건 성공했는데

실제로 구현할 때는 File처리로 json 파일을 읽어와서 하는 것부터 구현을 하는게 맞나요?
아니면 struct 와 같이 사용할 때 어떤 처리 방법이 있는 건가요…?

좋아요 1

부가적인 고민이 있었는데
cell 갯수를 지정해 줬는데 밑에 계속 보이는 cell 때문에 고민이었거든요…

그런데 Table View의 style grouped 가 답이었네요…



좋아요 1

https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614861-tableview

tableView(:cellForRowAt:)은 dequeueReusableCell을 위한 Method네요~ 만약 단일 cell을 받아고 싶으시면 그냥 cellForRow(at:) 메소드를 사용하시면 받아오실 수 있습니다~

(a)의 경우는 이런 이유로 안되는 것 같구
(b)의 경우는 cell을 outlet을 따오셔서 넣어주시니 되는 듯합니다:)

2번은 무슨 질문인지 이해가 잘 안되네요;

좋아요 1

비어있는 셀들의 경계선이 보이지 않고 테이블 뷰의 아래쪽이 깨끗하게 표시되길 원하는 거죠?

Grouped 를 선택하는 게 하나의 답이 될 수 있지만, 섹션의 헤더라던지 셀의 경계 표시 등에서 Plain과 차이가 좀 있을 순 있어요.

API 적으로 최근 많이 닮아가고 있지만 나중에 다시 디자인적인 분기가 있을지도 모릅니다.
(그러기엔 이제 SwiftUI에나 신경을 쓰겠죠?)

라는 게, json 파일을 읽는 게 아니라 json 형태의 문자열을 이용해서 표시한 거죠?

실제 구현시에는 네트워크를 통해 받아오거나 저장된 파일을 읽어오는 것부터 구현하는 게 맞습니다.
그리고 그 때 Codable을 사용해야 하구요.

네 감사합니다.

Codable 을 몰랐다면 encoding, decoding 이 많이 빡셌을 거 같습니다.

좋아요 1

Grouped 가 아니면 밑에 깔끔하게 경계선 안 보이게 하는 방법을 모르겠습니다!

좋아요 1

안녕하세요!

제가 cellForRow(at:) 메소드를 활용한 거 같은데 아닌가요? (동공지진…)

좋아요 1

제 미천한 지식이… 죄송합니다 ㅠ 해석을 잘못한 것 같네요… 디버깅을 좀 해봤는데요!

static cell을 만드신다는 것을 전제로, 말씀하신 코드는 nil을 반환하더라구요. 그도 그렇다고 생각되는게, viewDidLoad 시점이면 tableViewCell이 아직 layout되지 않았는데 거기서 뭔가 불러온다는게 이상합니다. 아래처럼 코드로 작성하니 정상적으로 구현되었습니다. (셀이 아직 없는데 셀에서 뭔가를 가져오는게 순서상 안맞는…?)

하지만 첫 번째 사진의 두 번째 코드 세 번째 코드는 정상적으로 작동하는데, 두 번째는 셀을 Asks the data source for a cell to insert in a particular location of the table view. 요런! 세 번째는 해보셨던 것처럼 해당 셀에 바로 넣어주기 때문에 가능한 듯 합니다~

혹시 또 문제점 알려주시면 저도 더 공부해볼게요!

좋아요 1

ㅋㅎㅎㅎㅎ 정말 감사합니다. 설마했던 게 탁 맞았네요… 공부하고 구현해 보는 게 아니라 구현하고 공부를 하다보니 이런 일이 발생했네요…

10년 묵은 체증이 쑥~ 내려가는 듯한 느낌입니다.

다시 한 번 친절한 설명 감사합니다.

좋아요 1

테이블 뷰의 DataSource 로딩과 UIViewController의 뷰 라이프 사이클간의 순서는
print 문으로 한 번 프린트 해 보시길 권해드립니다.

그리고 관련 쓰레드가 있으니 참고 해 보시길 바랍니다.

http://codershigh.dscloud.biz:30004/t/awakefromnib/107

위 포럼에서 마치지 못한 숙제를 … 해봤습니다.
UITableViewController, TableViewCell 1개로 해서 진행했습니다~

viewDidLoad - 역시 1번
viewWillAppear
viewWillLayoutSubviews - 서브뷰를 그리기 시작하는 시점
awakeFromNib - cell이 nib에서 깨어나(?) 그려지는 시점
tableView cellForRowAt - datasource입니다. 셀이 생성되고 나서 데이터 소스가 뿌려지는 것 같습니다.
viewDidLayoutSubviews - 셀을 비롯한 서브뷰들이 그려졌고
viewDidAppear - 화면이 나타나는 것 같습니다.

짧은 연구로는… cell이 서브뷰가 그려질 때 함께 그려지는 것처럼 보이네요. 고로 타이밍을 잘 맞춰야 한다… ㅋㅋ 그런 느낌인듯 합니다.

좋아요 1