오늘의 주제

1. Delegate 실습 


열 아홉번째 시간입니다.^^

지난 번에는 delegate의 개념에 대해 잠깐 살펴보았지요?
이번에는 말보다는 실습을 한 번 해보겠습니다 ㅎㅎ

어제는 제 어머니 생신이었습니다!!! 뭐.. 그렇다구요 ㅎㅎㅎ

자 그럼 스따뚜~~~~~~~~~~~~


# MKMapViewDelegate

자, 지지난번 까지 사용했던 프로젝트 고대로 계속 사용합니다~

지난번 포스팅처럼 어떠한 객체(여기서는 맵뷰)가 또다른 객체(여기서는 SecondViewController)를 자신의 delegate로 먼저 선언을 해 줘야 합니다.
SecondViewController에서 생성해준 myMapViewController안에 있는 myMapView객체가 SecondViewController를 자신의 대리자로 선언해줍니다.
여기서 self라는 키워드는, SecondViewController.m에서 써졌기 때문에 SecondViewController의 객체를 뜻합니다.


어? 그런데 저렇게 또 경고문구가 뜹니다.!!
내용인 즉슨 SecondViewController가 MKMapView의 delegate가 되기에 적절하지 않다는 뜻인 것 같은데요~
왜 그럴까요??

그 객체가 어떤 객체의 델리게이트가 되겠다고 선언이 될때, 자기 자신도 준비가 된 상태여야 합니다!
그래서 나는 그 객체의 대리자가 될 준비가 되어있다! 라고 헤더에 명시해 주어야 합니다. 아래와 같은 방법으로 준비가 되었음을 알려줍니다.


자, 그럼 MKMapView의 Delegate는 무엇을 할 수 있을까요?
궁금하다면 개발문서로 가봐야겠지요?ㅎㅎ
또는 웹버젼의 개발문서를 참조합니다.

어!? 그런데 Protocol 이라는 단어가 은근 거슬리네요?ㅋㅋㅋ delegate라는 녀석이 프로토콜의 개념안에 포함되는 녀석이므로... 다음에 시간내서 프로토콜에 대해서도 간략히 소개해 보도록 하겠습니다~


제가 이번에 구현해 보고자 하는 것은 맵뷰에서 지도가 움직이려고 할때, 그리고 움직인 후에 delegate를 통하여 특정한 동작을 실행시키려 합니다.
여기 적절한 메소드가 보이네요~ 눌러봅니다.


그러면 이렇게 함수의 원형이 친절하게 나옵니다.
주으윽 긁어서 복사합니다.


여기 이렇게 SecondViewController.m으로 돌아와서 복사해온 함수의 원형을 붙여 넣어주고 안에 그 상황에 맞는 행동을 넣어줍니다.
저는 region이 변경되려 하기전, 그리고 변경 후에 각각 로그를 출력하도록 해보았습니다.
위에 #pragma mark - 라고 써있는 갈색 녀석들은 프로그래머가 책갈피를 만들어 두는 것과 비슷하다고 생각하시면 됩니다.
습관을 들여두면 정말로 유용한 기능이므로, 다음에 시간이 난다면 팁쪽에 따로 포스팅 해보도록 할게요~
아니면 바로 검색 고고씽~!


실행해서 지도를 이리저리 움직여 봅시다~!


요로코롬 로그가 찍히네요~^0^


이제 좀 감이 잡히시려나 모르겠네요~

이해되지 않는 부분은 댓글 주세요~

제가 매일매일 지켜보고 있으니까요 ㅎㅎ

by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 


Posted by yagom

댓글을 달아 주세요

  1. Favicon of https://winplz.tistory.com BlogIcon 윈플. 2012.03.30 13:10 신고  댓글주소  수정/삭제  댓글쓰기

    역시 델리게이트는 엄청 편합니다.
    대신에 그 만큼 각 델리게이트에 무슨 기능이 포함되어있는지 아는것이 중요하겠네요..

  2. Ryan 2012.04.08 13:28  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? iPhone 개발 초짠데요, delegate와 protocol의 개념이 잘 안와닿네요...친절하게 설명을 해주셨는데도...delegate와 protocol의 차이와, 언제 사용되는지 등 설명이 되어 있는 documentation이 있을까요?

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

      원하시는 답변이 될 지는 모르겠지만,

      http://cafe.naver.com/mcbugi/7177
      http://blog.xiles.net/221

      이 글들을 한 번 참고해 보시구요, 정확히 어떤 부분이 잘 다가오지 않으시는지 알려주시면 제가 한 번 다른 방법으로 설명해 보도록 할게요...^^

      제가 설명 해놓고도 참 이게 처음 하는 분들에겐 쉽게 들어오기 어려운 부분이라 난감하네요..ㅎ

      일단 이것 저것 델리게이트 가지고 놀아보시면 느낌이 올지도 모르겠습니다 ㅎ

  3. 초보자 2012.06.19 07:58  댓글주소  수정/삭제  댓글쓰기

    data source에 대한 부분은 없는데 혹시 빠트리신 건가요? 강의 너무 잘보고있습니다~ 수고하세요~^^

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

      안녕하세요 초보자님 :-)
      델리게이트와 데이터소스는 약간의 개념차이는 있지만, 이들을 구현하고 사용하는 방법에 큰 차이가 없기 때문에 뭉쳐서 포스팅 했어요~^^
      다른 포스팅 보면 실제로 데이터 소스를 어떻게 활용하는지 보실 수 있을 거예요^^*

  4. 쌩초짜 2012.06.27 17:13  댓글주소  수정/삭제  댓글쓰기

    감사합니다 ㅠㅜ

    아이폰 개발 완전 쌩초짜인데,
    덕분에 잘 공부하고있습니다 ㅠㅠ

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

      :-) 안녕하세요 쌩초짜님~
      방문 고맙습니다 ㅎ
      도움이 된다고 말씀해 주시니 저도 영광입니다 ^^*
      자주자주 놀러오세요 ㅎ

  5. Kastner 2012.07.01 15:32  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 오늘 처음 방문했는데, 정리가 잘 되어있어서 도움이 많이 되네요 ^^*

    한가지 궁금한 점이 있는데, 사용하시는 메소드들의 종류나 사용용도는 어떻게 깨우치신 건지 ;ㅁ; 궁금합니다..

    뭔가 되게 방대해 보여서 어떻게 접근해야할지 막막하네요..

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

      안녕하세요 Kastner님 :-)
      방문해 주셔서 고맙습니다 ㅎ
      http://blog.yagom.net/55
      이 글을 참고하시면 도움이 되실 것 같습니다 ^^*
      또 궁금하신 점 있으면 말씀해 주세요 ㅎ
      힘찬 한 주 시작 되시길 :-)

  6. Kastner 2012.07.01 23:27  댓글주소  수정/삭제  댓글쓰기

    친절한 답변 감사합니다. 도큐먼트에 관해선 무심결에 그냥 지나치고 말았네요 ;;
    (__) 감사합니다.

  7. 초보kay 2012.07.27 10:32  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    야곰님의 강의를 너무 잘 보고있습니다. 감사합니다.

    질문 좀 드릴게요. ㅠㅠ

    델리게이트로는 아무 클라스나 될수 있는지요.
    저는 맵뷰를 포함하는 뷰콘트롤러인 myMapViewController클라스를 직접 맵뷰의 델리게이트로 설정해봤는데요.(클라스헤더파일에 <MKMapViewDelegate>선언)
    이유는 실험을 해보는데도 있고 또 이 콘트롤러의 헤더파일에는 이미 <MapKit/MKMapView.h>가 임포트 되여 있어서요.
    그런데 맵을 움직여도 맵이동사건을 처리하는 함수들이 호출되지 않아요. 물론 로그도 안남고요.ㅠㅜ
    맵뷰의 델리게이트 설정은 맵콘트롤러클라스의 initWithNibName()함수안에 해주었고요([myMapView setDelegate:self];),
    맵뷰가 움직일때 호출되여야 할 함수들도 이 콘트롤러클라스의 구현파일에 적었거든요.
    에러는 안뜨는데 호출이 안되는건 왜 그런지요... ㅠㅠㅠ
    야곰님 말씀대로 SecondViewController를 델리게이트로 할땐 제대로 되는데 델리게이트클라스를 바꾸면 왜 안될가요???

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

      어떤 녀석의 델리게이트는 어떤 객체(오브젝트, 인스턴스)간에 될 수 있습니다.

      대상 객체를 델리게이트로 설정한 후 그 대상 객체의 클래스 안에 델리게이트 메소드를 작성해 주시면 됩니다.

      만약 해당 델리게이트 메소드가 호출되지 않는다면 델리게이트가 제대로 설정되었는지 체크를 해 보아야 할 것입니다.

      init 메소드 말고 viewDidLoad 메소드에서 설정해 보시기 바랍니다.

    • 초보kay 2012.07.28 10:53  댓글주소  수정/삭제

      아 하! 됩니다. init메소드에서 설정한것이 잘못이였습니다.
      viewDidLoad메소드에서 설정하니 로그가 찍힙니다.

      친절한 답변 정말 감사드립니다.

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

      해결되셨다니 다행입니다 ^^*

  8. neoaero 2012.07.28 22:39  댓글주소  수정/삭제  댓글쓰기

    여러가지를 델리게이트로 지정하는게 가능한가요??
    가령 <MKMapViewDelegate,TableViewDelegate>로 작성해도 되는지요??
    아니면 한가지 객체만 가능한거지요??

  9. hyung 2012.11.13 09:52  댓글주소  수정/삭제  댓글쓰기

    야곰님 안녕하세요 ^^오늘도 염치 불구하고 질문하나 올려도 될까요
    다름이 아니고 IOS기본 앨범에 버튼들을 더 추가 시키고 싶은데 어떻게 안될까요
    UIImagePickerControllerSourceTypeSavedPhotosAlbum;으로 하면 다 만들어 져버리잖아요ㅠㅠ
    방법이 있을까요?

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

      언제나 환영입니다 :)
      UIImagePickerController는 기본적으로 네비게이션 컨트롤러로 움직이게 되죠~
      네비게이션 컨트롤러에 버튼을 커스터마이징 해 주면 될 것 같기도 한데요 :)
      http://stackoverflow.com/questions/7483906/customize-back-button-for-uiimagepickercontroller
      이 글이 힌트가 되려나 모르겠습니다 ㅎ
      버튼을 어디에 더 추가하려고 하는지에 따라 방법이 조금 변할 것 같습니다 ㅎ
      답변이 부족하다면 또 말씀해 주세요^^*

    • hyung 2012.11.13 14:45  댓글주소  수정/삭제

      옷.. 아직 잘모르겠지만 연구해볼게요! 뭔가 찾던 그것인거 같아요
      감사드립니다^^

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

      화면 왼쪽 위의 Run 버튼 오른쪽에 보시면 시뮬레이터 버전을 변경을 하여 테스트 해 보실 수 있습니다. :)

  10. 딴또 2013.03.11 15:20  댓글주소  수정/삭제  댓글쓰기

    정말 열심히 보면서 따라하고 있습니다.

    야곰님의 방대한 지식에 경의를 표합니다.

    어떻게 그 많은 지식을 쌓으셨는지...

    저는 따라하면서도 막막하기만 한데...ㅜ.ㅜ

  11. dklee7206 2013.04.17 14:01  댓글주소  수정/삭제  댓글쓰기

    설명 감사합니다.
    [[myMapViewControllerForModal myMapView] setDelegate:self]; 이부분이 문법적으로 이해가 안되서 그런데
    부연설명 부탁드려도 될까요?

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

      현재의 인스턴스(self)가 myMapViewControllerForModal 인스턴스의 property로 되어있는 myMapView 인스턴스의 델리게이트가 되겠다는 뜻입니다.

      즉 C++이나 자바 등을 배우셨다면
      myMapViewControllerForModal.myMapView.delegate = self;
      와 같은 말입니다.

  12. 2014.08.01 10:14  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.08.03 20:04 신고  댓글주소  수정/삭제

      안녕하세요, 델리게이트 또는 데이터소스 메소드 중에 required 라고 표시된 녀석들은 꼭 구현해 주어야 합니다. 빠진 메소드가 없는지 확인해 보세요 ^^


오늘의 주제

1. Delegate 
2. Data Source



열 여덟번째 시간입니다.^^

지난 번에는 맵뷰를 간단히 만들어 보았습니다~
정말 더 필요한거 없어요?
아무도 댓글도 반응도 추천도 없습니다...
저 블로그 접을까봐요...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이번에는 중요한 개념중에 하나인 Delegate와 Data Source에 대하여 알아보도록 하겠습니다~

중요한 개념이므로 이해 될 때 까지~!
스따뚜~~~~~~~~~~~~


# Delegate???

Delegate. 델리게이트.
우리말로 번역하면 대리자 정도로 해석할 수 있겠네요.

말 그대로 Delegate는 누군가가 해야 할일을 대신 해주는 녀석이라고 생각하시면 됩니다. 조력자가 되겠지요.

말로만 이렇게 설명하면 잘 감이 안오시죠?

간단히 그림으로 알아봅시다.

지난 번에 만들어 보았던 맵뷰입니다.ㅋ
맵뷰는 뷰 컨트롤러 위에 올라가 있는 상태였죠~


그런데 맵뷰가 동작하는 동안 뭔가 자신이 하기 벅찬 일들을 누군가 해줬으면 합니다.
그럴때 누군가에게 자신의 상태를 파악해서 적절한 일을 해주기를 원할때 델리게이트 선언을 해 줍니다.

바로 이렇게 말이죠~


그러면 델리게이트로 선언된 객체는 자신을 델리게이트로 임명한 객체가 어떤일을 도와달라고 하면 지정된 메소드를 통하여 알아서 척척척 스스로 어린이처럼 처리해 주는겁니다 ㅎㅎㅎ
사실 이렇게 말로만 설명하면 잘 감이 안와요~_~

# Data Source???

또한, 데이터 소스라는 것은 말그대로 데이터의 근원, 원천 뭐 이런뜻인데요~
어떤 객체가 누군가의 데이터 소스로 선언이 되면 선언한 객체가 데이터를 필요로 할 때 지정된 메소드를 통하여 데이터를 넘겨주는 역할을 합니다.

바로 이렇게 되는 시츄에이션 입니다.


이렇게 개념설명만으로는 잘 모르시겠다구요?ㅎ

그럼 다음번에는 간단한 실습을 통해서 알아보도록 할게요~

I'll be back!

커밍 쑨~!

by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. chan 2012.03.30 10:50  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다~~

    다음예제 빨리 볼수 있으면 좋겠네요~~ㅎㅎ

  2. 궁금 2012.03.30 16:25  댓글주소  수정/삭제  댓글쓰기

    UIviewcontrooler 클래스를 만들고 , 그 클래스의 .h 파일에 아웃렛을 정의하면(예를들어서 texte) .xib에서 First owner로 연결하면
    예전에는 texte 로 보였던거 같은데 이제는 delegate로 보여요, 이거 왜 이러는지 아시나요?

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

      흐음..
      UIViewController를 상속받은 클래스에 IBOutlet으로 texte를 변수로 선언해 준 후에 xib파일에서 연결할 때를 말씀하시는 건가요?
      File's Owner로 부터 출발하여 연결대상(texte)로 연결할 때 그렇게 나온다는 것은 조금 이해하기 어렵네요^^;
      혹시 반대로 끌어 오신것은 아닌지요..?
      좀 더 자세한 설명이 필요하네요^^;

  3. 인절미후후 2012.04.05 15:15  댓글주소  수정/삭제  댓글쓰기

    강좌 항상 잘 읽고 있습니다.
    여러번 더 봐야겠어요.
    아이폰 강좌는 xcode업데이트 때마다 달라지는 인터페이스 덕분에 이전 버전의 강좌로는
    초심자들에게 벽에 막히는게 많습니다.
    최신 자료를 가지고 강좌해주는 점만으로도 큰 감사함을 느끼는 바입니다. ㅎㅎ

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

      아이쿠..^^
      다른 분들도 그때는 최신이셨을 텐데..ㅎㅎ
      강좌라고 하기도 부끄러운 수준입니다^^;
      더욱 분발해 보도록 하겠습니다~!
      댓글 감사드립니다~!
      필요한 것 있으시면 말씀해 주세요~

  4. Potomac 2012.04.13 04:49  댓글주소  수정/삭제  댓글쓰기

    그냥 눈팅만 하고 있었는데 필요한걸 말하라는 바람에 용기를 내어 적어요.

    버튼에 아이폰에 저장된 사진이나 그림을 불러와서 그 사진이나 그림으로 버튼을 계속 사용하고 싶은데요.
    사진을 이동시켜서 버튼에 적당한 부분이 표시되면 더 좋겠구요.
    물론 버튼의 위치와 크기는 그대로 유지하고 싶어요.

    궁금한건 많지만 다음에 또 물어보려구요.

    감사합니다.

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

      ^^ 덧글 주셔서 고맙습니다.
      일단 이미지를 버튼이나 뷰로 불러오는 것에 대해서 조만간 포스팅 할게요~
      그런데 버튼 안에서 이미지를 원하는대로 움직이는 것은 조금 어려운 튜토리얼이 될 것 같네요..^^
      여기 블로그의 초급 수준을 조금 벗어나는 것이라, 일단 버튼에 사진을 불러오는 방법에 대해서는 먼저 포스팅 해 보도록 하겠습니다. 만약에 추후에 필요하시다면 요청하시면 예제 알려드리도록 할게요^^

  5. Potomac 2012.04.14 03:06  댓글주소  수정/삭제  댓글쓰기

    이렇게 바로 답장을 받는건 처음인것 같아요.
    개발자가 자기 사진을 넣는것 말고 아이폰 사용자가 자기 사진이나 그림을 넣는게 궁금해요.
    고마워요!

  6. Plateblack 2012.05.14 14:52  댓글주소  수정/삭제  댓글쓰기

    야곰님 강좌를 보며 Xcode로 프로그래밍을 하는데 푹 빠져있는 1인입니다^-^
    궁금한건 정말 많지만 하나만 꼽으라면... 음~
    아이폰과 데이터베이스를 연동해서 게시판을 만들어보는게 정말 궁금해요!
    웹서버 관련 지식이 너무 부족해서 어디서부터 손을 대야할지 막막하기만 하네요ㅠ

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

      ㅎㅎ.. 그정도는 지금까지 배운거로는 아직 어림없어요...ㅎ
      그래서 차근차근 해보려고 합니다~
      조금은 시간이 걸릴 것 같아요~
      물론 많은 분들이 그 부분 정말 하고 싶어 하시는 것 알고 저도 처음에 많이 하고 싶었으니까요~
      하지만... 걷기도 전에 뛸 수는 없잖아요 ㅎ
      차근차근 같이 가보도록해요~

  7. NewBie 2012.05.23 15:12  댓글주소  수정/삭제  댓글쓰기


    이 내용은 이제 슬슬 서버와 연동이 되는 부분을 가르쳐주시려고 하시는건가요? +_+ 기대가 되네요 ㅎㅎ

  8. SODA 2012.06.29 10:28  댓글주소  수정/삭제  댓글쓰기

    열혈독자입니다. 덕분에 좋은 정보 알찬 정보 많이 습득하고 있습니다.

    감사합니다.^___________^

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

      안녕하세요 SODA님~!
      오랜만에 덧글로 뵙네요 :-)
      자주자주 들러주시고 불같은 덧글 부탁드립니다 ㅎㅎ
      좋은 주말 보내시길...:-)

  9. 딴또 2013.03.11 14:53  댓글주소  수정/삭제  댓글쓰기

    정말 열심히 강의 보고 있습니다. 힘내십시오. 열심히 응원합니다.

  10. 나리 2013.05.02 09:43  댓글주소  수정/삭제  댓글쓰기

    쉽게 강의해주셔서 감사합니다^^
    많은 도움 되고 있어요!

  11. Favicon of https://pgspace.tistory.com BlogIcon 찌열남 2013.12.19 13:10 신고  댓글주소  수정/삭제  댓글쓰기

    처음으로 댓글 남깁니다.
    손가락물론 눌렀습니다 ㅎㅎㅎ
    잘보고 갑니다~

  12. 최현진 2016.05.13 09:49  댓글주소  수정/삭제  댓글쓰기

    항상 잘 보고 있습니다 ^^

  13. 진아 2016.05.25 01:08  댓글주소  수정/삭제  댓글쓰기

    늘 눈으로만 보고 갔었는데 오늘은 댓글을 남겨봅니다. 친절하고 자세한 설명이 큰 도움이 된답니다!!
    야곰 블로그 화이팅 입니당!!