오늘의 주제

1. XML 파싱결과 테이블에 보여주기


마흔 두 번째 시간이자 XMLParsing 마지막 시간입니다.ㅎㅎ

지난 번까지 진행했던 내용들은 잘 되셨는지요?

이번에는 이제 XMLParsing을 마무리 해보려고 합니다.

자, 긴말 필요없이 떠나 봅시다 ㅎ


# NSNotification

지난 번에 '인절미후후' 님께서 블럭코딩 중에 데이터를 다른 메소드로 전달 하는 방법이 떠오르지 않아서 어려웠다고 말씀하셨는데요,

우리는 이미 배웠습니다..ㅎㅎ

객체간 데이터 전달에 관한 내용들 말예요~^^
2012/05/24 - [iOS Dev/함께해보기] - iOS개발하기 #33. Protocol, Delegate (프로토콜, 델리게이트)
2012/05/26 - [iOS Dev/함께해보기] - iOS개발하기 #34. NSNotificationCenter (노티피케이션센터)

우리는 그래서 이번에 노티피케이션을 이용해 볼까 합니다.

이 계기를 통해서 노티피케이션에 대해 조금 더 이해할 수 있으리라 생각해 봅니다. ㅎ

일단 우리가 가져온 자료들을 저장할 객체들이 있어야 겠지요?ㅎ

만들어 줍시다.


그리고 우리는 노티피케이션을 활용해 보기로 했으니 노티피케이션센터에 노티피케이션을 받겠다고 등록해 줍니다.
등록을 했으면 나중에 없애주는 것도 잊지 말아야겠죠?ㅎ

 
자, 그리고 이제 노티피케이션을 쏠 때 전달할 데이터 저장소를 만들어 줘야겠죠? 바로 딕셔너리를 사용합니다 ㅎ 
저장소를 만들고 노티피케이션을 숑숑숑 쏴줍니다 ㅎㅎ 


자, 그럼 이제 실질적으로 노티피케이션을 받았을 때 실행이 되어야 할 메소드들이 필요하겠죠?
만들어 줍니다~ㅎㅎ 


그리고 이제 가져온 정보를 바탕으로 테이블뷰에 가져와야겠죠?
위에 노티피케이션을 위해 구현한 메소드에서 테이블뷰의 데이터를 reload하고 있죠?
그렇게 하면 reload 할 때 마다 테이블뷰 데이터소스 메소드들을 다시 호출하게 됩니다.
데이터소스에서 테이블에 뿌려주기 위하여 코드를 또 작성합니다~



그리고 실행하면!!?

짜잔~!


네 얼럿도 정상적으로 뜨구요~
날씨정보도 가져오네요 ㅎㅎ 



자, 이미지뷰를 남겨놓은 이유는, 여러분께서 직접 날씨에 맞는 이미지를 넣어보라는 의미에서 하지 않았습니다.

제가 날씨 이미지 만드기 귀찮아서 그런거 아녜요... 네 그런거 아닙니다 ㅋㅋㅋ

XML데이터 내려온 것 중에 local  엘리먼트에 속성값 중 icon이라는 녀석이 있는데, 날씨에 따라 이녀석의 속성값이 다르죠?

이녀석을 이용해서 적절한 이미지를 넣는 것을 구상해 보세요 ㅎ

그럼 저는 여기까지~!

부족한 것 있으면 폭풍질문 주세요~^^*

뿅!

by yagom

facebook : http://fb.yagom.net

twitter : http://twitter.yagom.net ( @yagomsoft )

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 손가락 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 




Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. Sio 2012.07.24 17:58  댓글주소  수정/삭제  댓글쓰기

    버튼을 누르고 들어갔을 때 화면에 Alert창과 테이블뷰가 데이터를 load하는 시간이 조금 긴것 같습니다.
    좀더 빠르게 바로 나오게 하는 방법이 없을까요????

    이번 강좌도 잘보고 갑니다~!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.25 09:53 신고  댓글주소  수정/삭제

      웹에서 데이터를 불러오고 xml 파싱을 하는 시간이 아무래도 걸리겠죠?ㅎ
      정확하게 어떤 것이 문제가 되는지 알려주세용 +_+ㅋ

    • Sio 2012.07.25 11:48  댓글주소  수정/삭제

      인..터넷의 문제였나 봅니다 ㅡㅡ;;;
      어제는 모달뷰가 뜰때 빈화면만 나왔고 잠시 후에 Alert창과 셀이 채워졌는데
      오늘은 빠릿빠릿하게 나오네요 ㅎㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.25 14:32 신고  댓글주소  수정/삭제

      잘 되신다니 다행입니다 ㅎㅎㅎ

  3. paxdreamer 2012.08.06 00:46  댓글주소  수정/삭제  댓글쓰기

    야곰님..TBXML로 작업하면서 여러가지 많이 알게되어 좋았습니다. 좋은 파서라고 생각합니다.
    근데 몇가지 단점도 있더군요. 인코딩타입이 EUCKR타입은 지원을 안하는군요.. 이것때문에 실력이 딸려서 고생좀 많이 했습니다.ㅎ
    그리고 URL로 전송된 이미지를 어떻게 받아와야 할지 모르겠습니다.
    XML구문에 포함된 아이콘이나 이런것들도 그렇고...아예 이미지 자체만 전송된다고 했을때 어떻게 구문을 짜야 하나요??
    도무지 모르겠습니다.
    예를들어 창 전체에 이미지를 띄우고 버튼이든 아니면 화면터치든 하여 이미지를 받아서 재생처리한다고 했을때 어떻게 해야하나요??
    모르는것이 너무 많아 개고생중입니다..ㅜㅜ

    그리고 추가 교육요청드려도 될까요??
    예를들어 어플을 구동했을때 얼럿창을 띄우려고 합니다. 근데 그 얼럿창을 커스터마이징하여 이미지를 입히고 XML로 파싱된 데이터를 넣거나.. 아니면 그런식으로 만들어진 얼럿창을 컨트롤하는... 그런 것들에 대해서 알고 싶습니다.
    책을 보거나 구글링 통해서 작업하고 있는데 제가 허접해서 제대로 구현을 못하고 있네요...

    부탁드려도 될까요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.06 09:51 신고  댓글주소  수정/삭제

      안녕하세요 야곰입니다 :-)
      덧글만 봐도 고생중이신 모습이 훤합니다...+_+ㅎ

      XML로 내려오는 이미지 URL을 가지고 추가적으로 HttpRequest 를 하여 이미지 데이터를 받아와야 합니다. 구글링을 해 보시면 많은 예제 찾아보실 수 있으실 거예요~
      이에 대해서는 추후 진행할 요량이었으나 요즘 제가 정신이 없어서 포스팅을 못하고 있습니다. 열흘 내로 재개할 예정입니다. 조금만 기다려 주세요..^^

      XML자체적으로 이미지 데이터는 아마도 전송하지 않을 것으로 사료됩니다.
      만약 XML로 이미지 데이터 자체가 내려온다고 하면 [UIImage imageWithData:]메소드를 사용하여 이미지 객체로 변환하여 주시면 됩니다.

      얼럿뷰 커스터 마이징은 상당히 번잡하고 애매한 작업입니다.
      http://blog.naver.com/PostView.nhn?blogId=yesusok&logNo=50102307516
      이 포스팅에 잘 나와있네요.
      그나저나 커스터마이징을 하기 보다는 따로 뷰 또는 뷰 컨트롤러로 만들어 주시는 것도 나쁘지 않은 방법입니다. ^^

      지금 이 덧글로써 도움이 될지는 모르겠지만 제가 지금 바로 포스팅을 해 드릴 수가 없어서 죄송스럽네요 ㅠㅠ

      혹시 더 추가적으로 궁금하신 사항이 있으시면 덧글 주세요. 포스팅은 못해도 덧글은 열심히 달고 있으니까요...^^;

  4. paxdreamer 2012.08.06 14:57  댓글주소  수정/삭제  댓글쓰기

    아주그냥 삽질 중입니다.ㅜㅜ
    원래 iOS개발하던것도 아니고 다른쪽 하다가 넘어온지 4개월짼데 지금 만지고 있는 구조거 많이 복잡해서요...
    게다가 모든 기능에 대해 100% 커스터마이징된 ui/ux구조라 아 힘듭니다.

    이렇게 가르침 주시는 것만도 감사하게 생각합니다.

    그리고 디비구성관련해서도 datamodel을 어떻게 사용을 해야할지도 잘 모르겠습니다.ㅜㅜ

    sql사용해서 기본적으로 적용은 했는데 이건뭐....제대로 아는게 없으니..나름 열심히 공부하고 시작한건데 구문조차 어떻게 짜야하는지 조차 헷갈려 완전 삽질 중입니다.ㅎㅎㅎㅎ

    댓글조차도 중구난방이네요 이해 부탁드립니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.06 17:00 신고  댓글주소  수정/삭제

      안녕하세요~
      paxdreamer 님~!
      정말 100% 커스터마이징 해달라고하면 짜증이 솟구쳐 오르죠...ㅎㅎㅎ
      다들 커스터마이징 하면 할 수록... 앱은 절름발이가 되어간다는 것을 깨닫지 못합니다...ㅠㅠ

      여튼 질문의 요지는 데이터베이스 모델을 어떤 것을 써야 할지 말씀하신건가요?

      iOS에서는 대부분 SQLite를 사용하여 데이터베이스 모델을 구성합니다.
      딱히 어떤 부분을 말씀하시는건지 잘 모르겠네요 ㅠ_ㅠ

  5. paxdreamer 2012.08.06 17:52  댓글주소  수정/삭제  댓글쓰기

    아..메모리관리법이 난감하네요. xml문서가 2중 3중 구조인데 계속해서 노티피케이션을 호출하고 딕셔너리를 만드는 루프를 탑니다. 흠....

    아 전체를 다 뜯어고쳐야 하나 굉장히 고민됩니다. 도움이 될만한 팁좀 주실수 있을까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.07 09:16 신고  댓글주소  수정/삭제

      네... 음...
      사실 XML 파싱은 iOS에서 귀찮고 성가신 일 중 하나죠.
      JSON이면 정말 손쉽게 사용할 수 있는데 XML은 저도 별로 좋아하지 않아요 ㅠ_ㅠ

      에지간한 이미지 사용이 아니라면 메모리 터질 정도로 사용하진 않을거예요 ㅎㅎ
      메모리 보다는 속도를 좀 더 걱정하셔야 할 듯합니다~
      속도향상과 메모리를 조금 덜 쓰는 쪽으로 말씀을 드려보자면,

      저 블럭을 따로 밖으로 빼지 않고 어떤 메소드 안쪽에서 실행을 하면 그 메소드 안에서 선언한 변수...
      예를 들어 NSMutableDictionary 또는 NSMutableArray 를 선언했다고 치면
      그 녀석 앞에 __block 이라는 키워드를 붙여주시면 블럭 안에서 사용할 수 있게 됩니다.
      http://fericia.tistory.com/4
      이 포스팅을 한 번 참고해 보셔도 좋을 것 같구요...
      그럼 최소한 노티피케이션을 타고 다른 메소드로 찾아가는 시간 정도는 벌 수 있을 듯 합니다.
      그리고 딕셔너리로 만들지 않고 TBXMLElement를 NSMutableArray 등에 통채로 복사해 넣고 사용하셔도 될 듯 합니다.

      도움이 되었으면 좋겠네요 ^^*

  6. paxdreamer 2012.08.07 16:41  댓글주소  수정/삭제  댓글쓰기

    아 난관의 연속이군요.....
    xml로컬파일도 파싱해야 하는데 경로 설정을 어떻게 해줘야 하는건가요???
    야곰님이 가르쳐주신 것과 같은 블럭코딩으로 파싱루틴을 구현했는데 parseXML 부분에서 파일 경로를 어떻게 해줘야 할지 모르겠습니다.ㅜㅜ
    그리고 파싱블럭으로 어떻게 넘겨줘야 하나요??
    tbxml파일을 살펴보고 있는데 도통.ㅜㅜ

    아 미치겠어요 여기저기서 마구 쏟아지는군요..ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.07 19:16 신고  댓글주소  수정/삭제

      ^^*
      파일 경로는 어디냐에 따라서 구하는 방법이 좀 다릅니다.
      http://stackoverflow.com/questions/6387915/how-to-get-file-path-in-iphone-app
      여기를 참고하시면 도움이 될 것 같아요~
      다른 부분의 질문들은 무슨 말씀인지 잘 이해가 안가네요 ㅠ_ㅠ

  7. paxdreamer 2012.08.08 11:32  댓글주소  수정/삭제  댓글쓰기

    질문과 TBXML을 적용하면서 경험한것을 공유하고자 또 댓글 남깁니다.
    XML구조에 같은 뎁스 내에 엘리먼트명이 다른 엘리먼트가 있다면 널로 받아오더군요.
    그래서 빌드를 하면 셀을 만드는 중에 셀오브젝트에 nil이 들어갈수 없다며 SIGABRT가 나구요. 코드 구문상에 에러는 아니고 데이터도 잘 들어옵니다. 그래서 싸이트 들어가서 API를 봤는데 관련한 경우 어떤식으로 처리하라는 방법이 없더군요..흠..제가 못찾은건지...
    할수없이 예외처리를 따로 해줘야 했습니다.
    XML구조상 같은 뎁스라도 엘리먼트 명이 바뀌는 경우 문자열을 비교하는 코드를 블럭 내에 넣어줘야 NULL이 들어가지 않은 제대로된 데이터를 로드 합니다. 사용하실 분들은 참고 하셨으면 합니다.ㅎ

    그리고 야곰님, 이제부터 질문 입니다.ㅎㅎㅎ
    정상적으로 로드된 데이터를 노티피케이션을 통해 헤더에 선언한 딕셔너리로 전달하는, 야곰님께서 알려주신 방법으로 작업했습니다. 문제가 데이터를 테이블에 셀형태로 로드할때 마지막 데이터만 셀에 뿌려집니다.
    데이터가 딕셔너리에 적재되야 하는데 적재되지 않고 계속 덮어 씌우는 형태입니다.
    아마도 블럭내에서 데이터를 읽어올때마다 노티를 송출하는 구조라 노티를 받는 매서드에서 생성한 딕셔너리에서도 노티를 받을때마다 데이터를 추가하는게 아니라 덮어씌우는 형태가 된것 같습니다.

    제가 딕셔너리의 정확한 사용법을 몰라서 그런건지 몰라도 구조적으론 다를게 없는데 왜 덮어 씌우는 형태가 됐는지 모르겠네요..

    참 테이블 하나 구현하는게 이렇게 어려운지 몰랐네요..

    조언 부탁드립니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.08 13:10 신고  댓글주소  수정/삭제

      네, 테이블이 iOS UI 중에 사용하기 어려운 녀석중에 하나지요. 저도 아직도 테이블 어렵습니다...ㅎㅎㅎ

      질문에서 노티피케이션을 통해 헤더에 선언한 딕셔너리로 전달한다고 하셨는데, 저는 배열에 추가작업을 해 준 것이구요~ 헤더에 선언된 딕셔너리에 직접 포인터를 연결해 준 것이 아닙니다.

      헤더에 있는 딕셔너리 안에는 처음에 Root Element를 받았을 때 만들어 주고 그 안에 item array와 날씨 정보를 세팅해 준 것이지요.

      당연히 item을 받을 때 마다 저 딕셔너리를 덮어씌우게 되면 결과가 다르게 나오겠지요~

      XML구조가 다르기 때문에 제가 잘 모르겠지만 아마도 이런 이유이지 싶습니다.
      만약에 XML에서 item 을 받을 때 마다 저 작업을 해 주셨다면 100%죠.

      itemArray = [[NSMutableArray alloc]....

      weatherDic = [[NSMutableDictionary alloc].....
      부분을
      if ( itemArray == nil && weatherDic == nil )
      {
      itemArray = [[NSMutableArray alloc]....
      weatherDic = [[NSMutableDictionary alloc].....
      }
      으로 변경하시면 덮어쓰여지는 일이 없겠습니다. 새로 객체를 생성하는 것은 한 번이면 충분하니까요.
      그리고 계속 받는 item들은 itemArray에 추가해 주시면 되겠습니다.

  8. paxdreamer 2012.08.08 20:29  댓글주소  수정/삭제  댓글쓰기

    아 맨붕상태라 좀만 생각해보면 알것을....일일이 물어봤네요..ㅜㅜ

    질문 올리고 수정하다가 코드 삽입 해서 첫번째 뷰에는 뿌렸습니다.

    근데 아무래도 데이터 저장구조를 다시 만들어야 할듯 하네요..

    기존에 만든 구조는 xml문서에서 뎁스별로 딕셔너리를 분리해서 저장하는 구조입니다. 크게 데이턱 들어있는 뎁스는 2중구조 입니다.

    근데 아무래도 합쳐서 저장해야 할듯 하네요.

    데이터를 테이블에 뿌리는 구조가 첫번째 테이블에서 상위 텍스트를 뿌리고 셀을 선택했을때 하위 뎁스를 뿌려야 하는데 첫번째 제가 만든 방식으로 하면 상위테이블과 하위 테이블리스트를 연결할 방법이 없네요..제대로 삽질한것 같습니다..ㅜㅜ

    아무래도 블럭에서 하나의 딕셔너리로 송출해서 엘리먼트 명을 비교해서 상위테이블에 첫번째 뎁스의 텍스트를 뿌리고 셀을 선택했을때 하위 텍스트를 뿌리는 구조로 수정해야 할듯 하군요..ㅜㅜ

    참 제대로 삽질하고 있습니다.

    고민인건 어떤식으로 루트테이블과 디테일테이블을 연결할 것인가 입니다. 상위테이블에서 셀을 클릭하면 하위테이블의 타이틀에 들어가고 xml의 하위 텍스트가 들어가야 하고 하위 테이블에서 클릭했을때 또 컨트롤을 연결해야 하는데...ㅜㅜ

    구조 자체를 어떤식으로 설계해야 할지...회사내에 물어볼 사람이 애매해서 자꾸 괴롭힙니다. 죄송해요.ㅜㅜ

  9. paxdreamer 2012.08.08 20:31  댓글주소  수정/삭제  댓글쓰기

    정말 문제는 이런식으로 적용해야할 부분이 14군데라..현재 데이터파싱모듈은 전부 적용해 놓은 상태라....ㅜㅜ
    아 이상태에서 어떻게 해야할까요...?
    게다가 이미지 아이컨도 적용해야 하는데. iOS로는 어떻게 하는지도 몰라요.ㅎㅎㅎㅎ
    사실 예전에 어떻게 했었는지도 기억도 안납니다. 아 허접개발자 뽀록나네요.ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.09 09:57 신고  댓글주소  수정/삭제

      음...
      그래서 처음 구조 설계가 중요하죠...ㅎㅎ
      배열을 두개 쓰셔야 할 것 같습니다.
      하나는 상위 데이터를 저장하는 배열이구요.
      하나는 하위 데이터를 저장하는 배열인데요.
      상위 데이터를 저장하는 배열은 데이터를 담고 있는 딕셔너리들을 담는 배열이구요,
      하위 데이터를 저장하는 배열은 배열 안에 딕셔너리들을 담고있는 배열이 또 들어가는 형태로 구성하시면 될 것 같습니다.
      말로 하니까 참 애매한데 도움이 되면 좋겠습니다^^;

  10. paxdreamer 2012.08.13 13:43  댓글주소  수정/삭제  댓글쓰기

    지난번에 xml을 통한 이미지 데이터 처리 대하여 다시 물어보려고 합니다.
    xml형태가
    <path>http://img.xxxxxx.com/maple/201206150001.png</path>
    이런 형태 입니다. 이걸
    pathStr = [pathInfo objectForKey:@"path"];
    //스트링으로 받은 URL에서 데이터를 받자
    NSURL *cherryImageURL = [NSURL URLWithString:pathStr];
    UIImage *cherryImg = [[UIImage imageWithData:[NSData dataWithContentsOfURL:cherryImageURL]] retain];
    cherryImage = cherryImg;
    이런 형태로 처리했고 cherryImage는 클래스 내에서 처리하기 위해 선언한 녀석입니다.
    여기서 받은 이미지를 버튼을 클릭했을씨 뷰어에 보이는 루틴을 만들려고 합니다.
    detailViewController로 cherryImage를 넘겨 처리하는 루틴을 만들고 있습니다.
    구문은 다음과 같습니다.
    UIImageView *cherryImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:cherry.cherryImage]];

    cherry는 상위 클래서를 처리하기 위해 선언한 것이고. cherryImage가 위 코드에서 사용된 놈인데.. 문제가 UIImageView로 선언된 cherryImageView에 저렇게 연결하니 NSString을 UIImage로 연결하지 못한다는 경고가 나오네요.. 에러죠.
    cherryImage는 UIImage로 선언되어 있고....상위클래스 포인터인 cherry는 상위 클래스가 커스터마이징된 TableViewController를 상속하고 있습니다.

    상위 클래스에서 정상적으로 cherryImage에 데이터가 들어가는 것을 확인 했구요.
    상위 클래스가 tableViewController를 상속하기 때문에 저런 경고가 나오는 건지.. 좀 애매 합니다.

    결론적으론...xml로 넘어온 이미지 경로를 처리하여 이미지를 저장하고 그걸 뷰로 연결해야 하는데..
    저런 방식 말고 다른 방법은 어떤식으로 해야 할까요?? 우선 포인터에 데이터가 들어가는것은 확인이 되고 구문상 문제도 없는데 뷰를 만드는 과정에서 경고가 나오니 알수가 없네요.
    UIImageView *cherryImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:cherry.cherryImage]];
    이 구문에서 뒷부분이 문제가 있는것은 알겠는데 상위 클래스에서 받은 데이터를.. 어떤식으로 구문을 짜야하는지 난감합니다.

    구글신을 통해 몇가지 루틴 적용해 봤지만 같은 경고메세지가 뜹니다.
    야곰님께서 답을 주세요.ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.13 14:34 신고  댓글주소  수정/삭제

      안녕하세요 paxdreamer님~!
      문서를 조금 더 읽어보셨으면 힘들지 않게 하셨을 수도 있겠는데요^^;
      imageNamed 메소드는 값을 받는 인자값이 NSString * 입니다. 그러니 당연히 경고가 나고 제대로 동작하지 않겠죠~
      imageNamed 메소드는 번들에 속해있는 이미지 파일 중에 같은 이름을 찾아와서 이미지로 전환해주는 메소드 입니다.
      제 생각에는
      UIImageView *cherryImageView = [[UIImageView alloc] initWithImage:cherry.cherryImage];
      로 변경하시면 무리없이 동작할 것 같습니다~!

  11. 나에게넌 2012.08.14 14:41  댓글주소  수정/삭제  댓글쓰기

    강의 볼때는 다 이해가 가지만..문제는 역시나 활용 & 적용이죠 ㅠㅠ

    강의 감사합니다..

  12. 꾸앵 2012.11.13 18:44  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님

    야곰님 덕분에 탭바에 네비게이션올리고 테이블 컨트롤러까지 올려서 잘 해나가고 있습니다
    헌데 테이블뷰에서 editrow를 하는데 다른행은 edit 버튼을 누르면 edit 화면으로 가는데 첫 행이 edit가 되지 않네요...

    왜이럴까요 ㅠㅠ
    일단 이걸 해놓고...
    셀 다중선택 삭제를 활용할 예정인데 또 막히네요 ㅎㅎ;;; ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.14 09:22 신고  댓글주소  수정/삭제

      흠... 글쎄요 +_+

      [tableView beginUpdates];
      원하는 작업 코드...
      [tableView endUpdates];

      이런식으로 한 번 해보시는건 어떨까요?

      다중선택을 하시려면 테이블뷰 델리게이트를 활요하시면 될거 같습니다 :)

  13. Karl 2012.12.18 18:18  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님!!
    매번 좋은 내용 듣는것도 죄송한데 질문 하나만 드리겠습니다... ^^;;

    제가 테이블 뷰에 값을 좀 세팅하고나서 다시 클리어? 초기화? 시키려고 하는데
    대체 어떻게 해야 할까요? ㅜㅜ

    검색을 좀 해본결과 값 지정해놓은걸 다 지우고
    [tableView reloadData]; <- 이걸쓰라는데 이걸 써도 초기화가 잘 안되던데 어떻게 해야 할까요? ㅜㅜ

    • Karl 2012.12.18 22:42  댓글주소  수정/삭제

      ㅎㅎㅎㅎ 아 이저에 야곰님이 올리신 글보고 해결했습니다..
      제가 너무 경솔하게 건너뛰기를 해버렸네요
      올려주신 아티클들 덕분에 생소한 iOS 쉽게 적응하고 있습니다.
      항상 감사합니다 ㅎㅎㅎ 좋은하루 되세요!!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.19 12:38 신고  댓글주소  수정/삭제

      안녕하세요 Karl님 :)
      질문은 언제든 환영입니다!
      잘 해결되셨다니 다행입니다 ㅎ

  14. 꾸앵 2013.01.17 20:28  댓글주소  수정/삭제  댓글쓰기

    다시 또 질문드려요! ㅎㅎ

    customCell 에 progressBar를 하나 넣었습니다.
    그리고 enum celSubViewTag쪽에 CELL_PROGRESS 라는 태그를 추가하고 XML에서는 따로 받는부분 없이
    셀에 쓰여질 때 0으로 만들어버릴라고 했습니다
    (후에다운로드부분이 구현될거라...)

    그리고 셀 쓰는 부분에
    UIProgressView *progressBar = (UIProgressView *)[cell viewWithTag:CELL_PROGRESS];
    라고 태그를 설정해주고

    [progressBar setProgress:0.01]; 로 초기화하고


    각각의 셀마다 찍히는 부분또한 똑같이
    [progressBar setProgress:0.01]; 로 해줬는데

    xib 에서 설정했던 0.5의 값이 그대로 나옵니다...

    어디서 잘못된걸까요 ....?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.18 09:33 신고  댓글주소  수정/삭제

      꾸엥님, 간만에 뵙습니다 ㅎ

      일단 xib에서 progressBar에 태그값이 맞게 잘 들어가 있는지 확인해 보시구요...

      progressBar가 nil값으로 들어온 것이 아닌지 확인해 보시구요~

      [progressBar isKindOfClass:[UIProgressView class]]의 값이 참인지도 확인해 보셔요. :)

  15. Harold 2013.08.16 19:24  댓글주소  수정/삭제  댓글쓰기

    프로젝트하는데 있어서 유용하게 잘봤습니다...만....

    itemarray인가요? 그놈을 nil로 초기화하면 값이 계속 null이 나옵니다ㅜㅜ alloc init으로 초기화하니 잘되더라구요 ㅎㅎ

  16. mainrichoo 2013.08.26 19:37  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 매번 양질의 강의 감사합니다.
    이번것을 따라하다보니...
    -(void) viewDidUnload 가 Deprecated in iOS 6.0.이던데...이럴때는 어디다 removeObserver를 설정하는게 좋을까요??
    힌트 부탁드립니다...ㅠ

  17. Harold Jinho YI 2013.12.06 13:42  댓글주소  수정/삭제  댓글쓰기

    xml을 파싱하는데요..

    일부의경우 노드(?)가 나오지 않는데요...(예를들면 버스도착예정정보 없는경우... 차량대기중으로 인해..)

    이런경우 @try도 안먹히는데... 방법이 없나요??? :(

    • Harold Jinho Yi 2013.12.07 09:59  댓글주소  수정/삭제

      자답이네요...

      http://cafe.naver.com/mcbugi/282437 요기보고 힌트를 얻었다는... :)

      String을 추출하기전에 객체가 nil인지 체크를하니 단번에 해결되더군요!!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.12.08 23:55 신고  댓글주소  수정/삭제

      네, nil 확인은 꼭 해주세요 ㅎㅎㅎ

  18. 베어러블 2013.12.19 10:18  댓글주소  수정/삭제  댓글쓰기

    recieveNewItem 메소드에서요 ,, 노티피케이션 송출로 itemdic에는 데이터가 들어가는데 전역변수 itemArray에 객체가 추가가 안되요.ㅠ 뭐가 문제인걸까요??

    -(void)recieveNewItem:(NSNotification *)noti{
    NSDictionary *itemDic = [[NSDictionary alloc] initWithDictionary:[noti userInfo]];
    NSLog(@"%@",[itemDic objectForKey:@"brtId"]);
    [self->busArray addObject:itemDic];
    NSLog(@"%@",[self->busArray objectAtIndex:1]);

    [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
    }

    참고로 itemArray를 저는 busArray로 했어요~ 진짜 모르겠네요.ㅠ itemDic에는 들어가는데..

  19. 베어러블 2013.12.20 10:23  댓글주소  수정/삭제  댓글쓰기

    맞네요.ㅋㅋ.ㅠㅠ 그거때문에 엄청 고생했어요 실력이 대단하신거 같아요~ 대학생인데 블로그에서 많은도움 받고있습니다~ 손가락 마구 누르고 싶은데 하나밖에 안눌리네요.ㅎ.ㅎㅎ. 수고하세요~

  20. 쫑이s 2014.04.23 14:58  댓글주소  수정/삭제  댓글쓰기

    야곰님~
    반대로 아이폰에서 DB로 데이터를 전송할 경우에도 웹페이지 작성한 다음에 전송을 할 거 같은데,
    어떤 클래스를 사용하는지 알려주세요 ㅜ_ㅜ UIWebView 내의 메소드를 살펴봤는데, 안보이더라구요..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.04.23 18:43 신고  댓글주소  수정/삭제

      안녕하세요.
      상황에 따라 많이 다르겠지만, http request를 사용합니다.
      서버로 데이터를 전송하는 방법은 다양하기 때문에 뭐라고 단정짓기가 참 어렵군요^^;

  21. 내친구가민 2014.07.21 22:50  댓글주소  수정/삭제  댓글쓰기

    강좌 잘보고 배우고 갑니다..
    그냥 지나치는건 아닌것같아서 글남깁니다.^.^
    야곰님 블로그를 미리 알았다면 책안사도 되는건데;;;;
    책은 시간이 좀 많을때 차근차근 정독하고..지금은 시간이 촉박해서 핵심포인트만 잡아야할것 같아요..
    덕분에 키 포인트(알짜배기만);;; 염치없지만 따라배우고 갑니다~!!


오늘의 주제

1. TBXML로 XML파싱


마흔 한 번째 시간입니다.^^

지난 번에 테이블을 준비해 두었었죠?
오늘은 XML 파싱을 한 번 해보려 합니다.
본래 코코아 내에 NSXMLParser 라는 XML파싱 클래스가 존재 합니다.
그래서 그녀석으로 포스팅을 해볼까 하다가, 그녀석 보다 좋은 녀석이 있어서 소개 겸 진행해 보려고 합니다.

사용법도 훨씬 간단하고 속도도 훨씬 빠릅니다~!
NSXMLParser는 처음 파싱해보는 분들은 정말 어려워 하는 경향이 있습니다.
그래서 준비했습니다. TBXML...!

오픈 라이브러리 가져다가 잘 쓰는 것도 중요합니다 ㅎㅎㅎ

저도 처음 써보는데, 일단 해 봅시다 ㅎㅎ


# XML의 구조


지난 번에 예제로 쓰겠다고 했던 날씨 XML 데이터 입니다.
XML은 요소(엘리먼트), 속성 등을 알면 됩니다.

1번 : 엘리먼트 입니다. 저 줄 하나가 통채로 엘리먼트 입니다. 맨 위에 루트 엘리먼트가 current라는 이름을 갖고 있네요. 그 자식 엘리먼트가 weather구요, weather의 자식 엘리먼트들이 local이란 이름으로 쭈욱 나열되어 있는 모습입니다.
2번 : 엘리먼트 이름 입니다.
3번 : 속성 이름입니다. 저렇게 엘리먼트 내부에 들어가 있는 녀석을 속성이라고 부릅니다.
4번 : 속성값 입니다.
5번 : 엘리먼트 텍스트 입니다.

일단 이렇게 기본적으로 알고 가 봅시다~!

# TBXML 다운받기

http://www.tbxml.co.uk

TBXML 공식 블로그입니다. 영국사람이 만들었나 보네요 ㅋㅋ 들어가 봅시다.
다운로드 링크를 타고 가서 소스파일을 다운받습니다.
지금 최신 버전이 1.5 버전이라서 추후에는 어떻게 변경될지 모르겠지만 여튼 아직까진 이렇습니다 ㅎㅎ


압축을 풀면 폴더들이랑 파일들이 나와요~
그중에 제가 여기 집어 넣은 녀석들을 골라서 가져옵니다.
그리고 우리 프로젝트의 pch파일로 옵니다. 거기서 하나 정의를 해 주시구요. (이녀석이 뭔가는 별로 신경쓰지 않으셔도 됩니다.) 


그리고 프로젝트 타겟 속성으로 와서 라이브러리 추가 버튼을 눌러줍니다.


libz.dylib를 추가해 주시구요


이제 테이블뷰 컨트롤러 구현파일에 와서 헤더파일을 임포트 합니다.
그리고 이쁘게 코딩~ 코딩~
TBXML은 블럭코딩 방식을 사용하였는데 iOS4.0 이상부터 지원합니다. 일단 아래 보이는 코드들이 좀 생소하더라도 블럭 코딩이라는 것만 알아두시고, 일단은 넘어갑니다 ㅎㅎ


또 또 코딩합니다~ 스레드 만드는 것은 설명 필요 없겠죵? +_+
2012/06/01 - [iOS Dev/함께해보기] - iOS개발하기 #36. UISearchDisplayController(2)
2012/06/06 - [iOS Dev/함께해보기] - iOS개발하기 #38. UISearchDisplayController(4)
요기서 스레드에 대해 좀 볼 수 있을 거에요~


자, 여기까지 모두 잘 되었다면 요로케 로그가 찍혀야 합니다~!
오홍홍~_~


잘 나왔나용?ㅎㅎ
오늘 테이블에 뿌리는 것까지 해 보려 했는데, 일단은 여기까지만 해야겠네용~

지난 번에 잘 따라오신 분들이라면 이미 테이블에 넣는 작업을 하고 계시지 않을까 싶네요 ㅎㅎ

그럼 다음 번에 또 뵙도록 해요 :-)

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 손가락 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

댓글을 달아 주세요

  1. 인절미후후 2012.06.13 19:47  댓글주소  수정/삭제  댓글쓰기

    TBXML을 이전에 문서로는 봤었는데요(저는 이전에 테이블에 파싱해서 데이터 뿌려주는거 할때 NSXMLParser를 이용했었습니다.)
    야곰님 덕분에 오늘 접해보았습니다.
    스샷대로 따라가서 로그까지는 뿌려보았는데요..
    사용해본 후기를 적어보자면은 1.5버전은 블록코딩을 사용해서 좌절을...
    안에서 변수생성은 되는데 밖으로 변수를 보내거나 밖에 있는 변수를 데려와서 값을 넣어주는 방법을 모르겠더라구요..
    설상가상으로 해당사이트 API와 가이드라인을 찾아보는데 1.5버전의 메뉴얼은 없는거 같더라구요.
    그래서 결국 제 프로젝트에 적용을 못하고 NSXMLParser를 사용해서 마무리 했답니다 ㅎㅎ
    다음 강좌에 테이블 적용편을 보면 다시 한번 실습해보도록 하겠습니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.14 01:31 신고  댓글주소  수정/삭제

      넵, ㅎ 저도 NSXMLParser를 포스팅 할까 고민 많이 했는데... 흠... 그거로 해볼껄 그랬나봐요^^;
      블록코딩을 했지만 우리는 데이터를 전달 해 줄 수 있는 많은 수단들이 있었잖아요?ㅎ 잘 기억해 보세요...ㅎㅎ
      조만간 그 베일을 벗겨드릴게요~
      저도 1.5버전에 대한 도큐먼트가 없어서 처음에 굉장히 헤메었는데 구글신께서 도와주셨죠 ㅎ
      항상 이렇게 오셔서 덧글도 주시고 항상 고맙습니다^^*

  2. 인절미후후 2012.06.14 10:34  댓글주소  수정/삭제  댓글쓰기

    NSXML파서는 관련 자료가 많으니까요~
    오히려 새로운 부분의 코딩을 접해서 저는 더욱 신이 납니다.
    오브젝티브씨도 그냥 자바처럼 씨처럼 사용 했는데 이번 강좌로 오브젝티브씨에 한발 더 다가서는 것 같아서
    머리는 복잡하지만 두근두근 합니다 ㅎㅎ
    단순히 외국자료의 번역을 소개하는게 아니라(시중에 그런 책/블로그 도 많잖아요.) 정형화된 방식이 아니라
    더욱 학습효과가 좋다고 생각합니다 다음 강좌가 기다려지네요 이전 강좌 복습 좀 해야겠네요 ㅎㅎ
    덕분에 xml파서 자료도 찾아보고 저는 아주 유익했습니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.14 10:52 신고  댓글주소  수정/삭제

      그렇게 말씀해 주시니 저도 마음이 한결 놓이네요 ㅎ
      이렇게 덧글이 달리니 저도 아주 신이 납니다 ㅎㅎ
      요즘 바빠서 제대로 쓸 시간이 없는데, 일단 XMLParser 까지만이라도 최대한 빨리 마무리 지어야 겠네요 +_+

  3. Sio 2012.07.24 17:00  댓글주소  수정/삭제  댓글쓰기

    TBXML이라는 것도 있군요 ㅎㅎ 덕분에 block?코딩 이라는 것도 알게 되었습니다;;;
    처음 보는거라 이게 뭐지??? 했는데 아직도 신기합니다 ㅋㅋㅋ
    근데 아직도 뭔지 잘 몰라서 계속 구글링 중 입니다 ㅋㅋㅋ
    정말 계속 새로운 뭔가가 나타나는 것 같아요 ㅎㅎ

    잘보고 갑니다~!

  4. 나에게넌 2012.08.14 13:36  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 감사합니다..
    NSXMLParser도 찾아봐야겠어요..

    TBXML이랑 메모리 사용량에선 비슷하지만 속도면에선 차이가 난다내요..
    http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.14 14:21 신고  댓글주소  수정/삭제

      위 링크의 그래프는 저도 본 자료인데 Seconds To Parse라고 나와있죠 :)
      즉, 파싱에 걸리는 시간입니다.
      NSXMLParser보다 TBXML이 소요시간이 훨씬 짧은 것을 확인 할 수 있습니다 ^^~

    • 나에게넌 2012.08.14 18:05  댓글주소  수정/삭제

      그러네요..Speed만 보고 판단해버렸네요.. ㅎ

  5. seongkwon 2012.09.08 16:29  댓글주소  수정/삭제  댓글쓰기

    야곰님 ^^ 항상 강의 관련해서 자료 잘보고 있습니다.
    XML 파싱공부중에 TBXML로 XML파싱 부분을 완료하였는데 Log가 찍히지가 않습니다.

    모든 부분 똑같이 작성하였고, 에러는 없는데 하나 워닝이 있다면
    TBXML.m 파일에서 value = [NSString stringWithString:@""]; 이부분이 워닝이뜹니다.

    지우고 타입을 바꿔봐도 파싱자체가 되는거 같지 않습니다.
    제가 잘못한 것일까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:39 신고  댓글주소  수정/삭제

      늦은 답변이지만... 혹시 TBXML 최신버전을 사용해 보셨는지요?
      이게 워낙 빨리빨리 바뀌는 IT시대라서 새로운 버전이 나왔을 수도 있어요~ iOS도 Xcode도 빨리빨리 변화하고 있으니까요^^;

  6. 꾸앵 2012.10.23 16:38  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. TBXML을 사용하는 강좌 감사합니다.
    헌데 진행하다가 문제가 생겨 이렇게 댓글남겨요
    뷰컨트롤러쪽에선 에러가 안뜨는데
    TBXML.M파일이랑
    TBXML+HTTP.M 파일에서 에러가 무려.... 9개나 잡히네요 ....

    http://blog.naver.com/storyphoto/viewer.html?src=http%3A%2F%2Fblogfiles.naver.net%2F20121023_160%2Fangel1004ppp_1350977758644y4S0a_PNG%2F%25BD%25BA%25C5%25A9%25B8%25B0%25BC%25A6_2012-10-23_%25BF%25C0%25C8%25C4_4.27.29.png

    소스 원본이 필요할려나요?? ㅠㅠ

  7. 꾸앵 2012.10.24 19:32  댓글주소  수정/삭제  댓글쓰기

    ARC를 제외시키고 나니 대부분의 오류들이 없어졌네요... 헌데 하나의 오류가 더 남긴 했는데
    pch 파일에서 오류가 발생하고
    CGG 4.2 Error
    Unrecognized command line option "-fno-objc-arc"

    라고 나오네요

    구글링 해보니 컴파일러를 GCC 에서 LLVM 으로 교체해보라고 하던데
    방법도 모르겠고.. 답답하기만 하네요 ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.25 09:50 신고  댓글주소  수정/삭제

      http://useyourloaf.com/blog/2011/03/21/compiler-options-in-xcode-gcc-or-llvm.html
      이 글을 한 번 참고해 보시기 바랍니다 :)
      글에있는 스크린샷을 참고하시면 대충 어디있는지 짐작하실 수 있을거 같아요~ 아마도 프로젝트 속성에서^^

    • 꾸앵 2012.10.25 11:10  댓글주소  수정/삭제

      아... 빌드셋팅쪽에 있어서 바꿨어요 ^^;
      어쨌든 도움 감사합니다 ㅎㅎ

  8. 꾸앵 2012.10.26 11:42  댓글주소  수정/삭제  댓글쓰기

    이틀동안 이 오류가지고 허공에 삽질 열심히 해대고 있는데 ㅋㅋ ㅠㅠ
    ARC 관련해서 적용하면 다른오류 컴파일러 교체하면 또 이전오류 무한반복중.... ㅠㅠ
    구글링을 열심히 해도 딱히 이거다 라는 것도 없는 것 같고... 으앜ㅋㅋ

    TBXML+HTTP.m 파일의
    @autoreleasepool에서 Unexoected '@' in grogram
    으로 에러메시지가 나오는데.. 후... XML 파싱 힘드네요 ㅠ

    • 꾸앵 2012.10.26 11:55  댓글주소  수정/삭제

      블럭프로그래밍이 오토릴리즈풀을 파싱을 못한다는 것 같네요
      NSAutoreleasePool 클래스로 바꿔보라고 해서
      바꿨더니 잘되네요 크크...

      항상 고치고 보면 1분만에 고치는걸 안될땐 그걸 모르니...
      공부를 얼릉 열심히 해야할 듯 ㅠ

      해결했으니 다음으로 고고~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.29 09:14 신고  댓글주소  수정/삭제

      ㅎㅎ 항상 해결하고 보면 정말 아무것도 아닌게 많죠^^;
      그런 사소한 것들이 쌓이고 쌓이다보면 어마어마해 지는 것입니다...ㅎㅎㅎ
      많은 도움이 되어드리지 못해 정말 죄송합니다. 그래도 해결되셨다니 다행이네요 ㅎ

  9. 초보에꿈 2013.01.10 16:35  댓글주소  수정/삭제  댓글쓰기

    열심히 강의를 듣고 따라하고 있는데요 ㅎㅎ

    // 파싱 시작
    [TBXML newTBXMLWithURL:weatherURL success:tbxmlSuccessBlock failure:tbxmlFailureBlock];

    이걸로 하니깐 계속 찾을수 없다고 나오고 .. 오류나서 ;;; 멀 잘못했나 싶었는데 ;;;;

    // 파싱 시작
    [TBXML tbxmlWithURL:weatherURL success:tbxmlSuccessBlock failure:tbxmlFailureBlock];

    이걸로 바꾸니깐 잘 되네요 ;;......newTBXMLWithURL 로 쓸려면 HTTP파일에 있는 것들도 다 바꿔야 하는건가요???

  10. 깊은물 2013.07.07 16:45  댓글주소  수정/삭제  댓글쓰기

    제가 버스 어플 만들어 볼라구 아이맥도 사고 xcode도 보고 어언 2년 가까이 되는데요

    야곰님의 xml파싱을 그대로 따라해서 빌드했는데..에러도 안뜨고 로그도 안나오는 상황이 되었습니다.

    뭐가 문제인지 봐주시면 정말 고맙겠습니다.

    테이블뷰에 뿌리기도 전에 로그가 안나타나요..흑흑..

    일단 xml parser 2차시 까지 따라서 소스 입력해 보았습니다.

    소스를 보여 드리고 싶은데

    파일 첨부하는 데가 없네요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.07 16:36 신고  댓글주소  수정/삭제

      이 포스팅 자체가 오래된거라, TBXML 라이브러리도 좀 바뀌었을 것고... iOS 버전에도 변화가 많습니다 ^^;

      지금 아마 제대로 동작을 하지 않을 것 같습니다~

  11. 깊은물 2013.07.07 16:52  댓글주소  수정/삭제  댓글쓰기

    NSString *localStr=[itemDic objectAtIndex:@"local"];
    NSString *descStr=[itemDic objectAtIndex:@"desc"];
    NSString *taStr=[itemDic objectAtIndex:@"ta"];


    에서 빨간줄이 3줄 에러납니다.
    No visible @interface for 'NSDictionary' declares the selector 'objectAtIndex'

    http://cafe.naver.com/mcbugi/274136에 첨부파일2개 올렸습니다.
    2번째 첨부파일 보시고 가르침을 주십시오...


    왜 그럴까요? 흑흑...

  12. mainrichoo 2013.08.21 04:52  댓글주소  수정/삭제  댓글쓰기

    질문이 있어서 글 남깁니다...
    일단....tbxml버전 업뎃이 왜 안되지 왜 안되지 하면서 고생했네요..ㅠㅠㅠ

    일단 블럭코딩...혹이거 배울수 있는 강좌 좌표가 있으면 부탁좀드릴게요..ㅠㅠ

    그리고 중간에 ARC를 가능하게 해버리면 미리 작업해놓았던 ARC없이 짠 코드들에 영향을 주나요?
    예전에 ARC 설정하고 dealloc해버리면 오류났던것 같은데...궁금합니다...

  13. 콜필드 2013.08.24 00:42  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 아이폰 앱 개발 중에 이 포스팅 발견하고 안도의 한숨을 쉬고 있습니다. 감사합니다.

    그런데 궁금한 점이 있는데, 이렇게 xml으로 저장된 데이터들을 테이블뷰에 뿌려줄 때, 그 데이터 양이 많아지면 문제는 없나요?

    예를 들어 항목이 1천개가 넘어가면 말이죠...

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.08.24 13:12 신고  댓글주소  수정/삭제

      안녕하세요 콜필드님 :)

      저도 iOS에서 테이블을 처음 쓸 때 그런 걱정을 했더랬죠..ㅎㅎ

      하지만, 우리가 보이기에 테이블이 엄청나게 길어 보이지만 실상은 Cell을 계속해서 화면에 다시 세팅해 주는 것이랍니다.

      이해가 되셨을까요..?

      즉, 테이블에 담을 데이터는 우리가 가지고 있지만 (string 데이터라고 해봐야 몇 천 몇 만개라도 메모리에 차지하는 영역은 별로 없다고 보시면 됩니다) 정작 화면에 보여주고 메모리에 올라와 있는 셀은 딱 우리가 보고있는 그 셀들 밖에 없다는 것이지요...

      음... 그래서 cell reuse identifier 이 있어야 하는 것이구요.
      음... 말로 하려니까 정말 어렵네요^^;

      조금 더 검색 해보시면 좋은 자료들이 나올 것 같아요.

      더 궁금하신 것이 있으면 언제든 말씀해 주세요 :)

      행복한 주말 되시길 빕니다!