본문 바로가기

about DEV/just follow

iOS 개발 무작정 따라하기 - Address Book 8

지난 강좌에서 UI배치까지 완료되었다. 오늘은 UI에서 작성된 각종 글귀들을 SQLite를 이용해서 저장하는 부분을 진행한다.  코드가 조금 길어질 수 있으나, 난이도가 어려운 문제는 아니기에 잘 따라올 수 있을꺼라 생각한다.


- 본격 그룹속성 저장하기  (진격의 코딩)



바로 이부분  - (void)saveGroup이라는 메서드에 해당 기능을 구현해볼 것이다.  그리고 상황에 맞는 예외처리 등을 함께 구현한다.  일단, 생각을 먼저 해보자. 

사용자가 저장버튼을 터치했을때, 그룹의 이름, 그룹의 태그, 그룹의 메모 그리고 그룹 대표이미지로 사용할 이미지를 확인해야할 것이다.  이중에 필수적인 요소는 그룹 타이틀이 된다. 그 외의 요소는 옵션요소로 사용자가 입력하지 않아도 그룹의 생성에는 문제가 없어야 한다.  물론 이 필수요소는 여러분이 정하기 나름이다.  우선은 본 강좌에서는 그룹타이틀 (groupName)을 필수로 지정할 것이다.


메서드에 코드를 추가했다. 주석을 달아두었으니, 위의 스크린샷을 참조해서 코드를 작성해보자. 작성을 다 했다면 빌드/런을 해보고 저장 버튼을 클릭해본다.


예외처리를 해두었는데, '그룹명을 입력하지 않았습니다.' 라는 Log가 출력된다.
그말은, 그룹명텍스트필드 (groupNameTextField)에 입력된 값이 없기 때문이다. 
이럴 경우, 사용자 (User)가 쉽게 인지할 수 있도록, Feedback을 주는 기능을 넣을 것이다. 


- UIAlertView를 이용해서, 사용자에게 알림메세지를 보내자


앞서 적었더 NSLog(@"그룹명을 입력하지 않았습니다.") 라는 코드를 삭제하고 아래의 이미지를 보고 코드를 작성한다. 



위 스크린샷이 2개가 있는데, 첫번째 스크린샷은 UIAlertViewDelegate를 AddGroupViewController.h에 선언했다. 왜 선언했냐면... 해당 클래스에서 UIAlertViewDelegate Methods 를 사용하겠다고 설정을 해주는 것이다.  

그 다음에는 AddGroupViewController.m 파일에서 로그메서드를 삭제하고 UIAlertView관련 메서드를 작성했다.  UIAlertView가 어떤건지 잘 모르겠다면, 일단 빌드/런을 진행해서 그룹명을 입력하지 않은 상태로 저장버튼을 눌러보자.  그럼 바로 어디선가 많이 본듯한 장면이 나타날 것이다.


어디선가 많이 본 장면이지 않은가? 자 이제 여러분은 iOS에서 매우 많이 사용하는 하나의 기능을 적용시켜보았다. 이 UIAlertView에 디테일을 조금 살려보자.  사용자는 이 경고메세지를 보고 "아 내가 뭘 안적었구나.." 하는 걸 알 수 있을 것이다. 더불어 확인버튼을 누르고 그룹명을 작성하려 할 것이다. 그렇다면 우리가 조금더 쉽게 도와줄 수 있는 방법은 뭐가 있을까? 

바로 [확인]버튼을 누르면 자동으로 groupNameTextField에 커서가 이동되면 사용자는 한가지 액션을 하지않아도 원하는 바를 이룰 수 있다. 이 지점에서 UIAlertView의 Delegate method가 사용된다. 


위 스크린샷을 참고해서 메서드를 추가해보도록 하자.
alertView willDismiss 블라블라~ 라는 메서드는 이미 프레임워크 내에 존재하는 메서드다. 
UIAlertView가 내려갈때 (사라질때) 호출되는 메서드로 메세지창이 내려갈때, groupNameTextField로 커서(FirstResponder)가 이동되는 기능을 구현했다.  그럼 사용자는 확인버튼을 누름과 동시에, 바로 그룹명을 지정할 수 있게 되었다.


- 객체지향? 객체지향! Group 객체를 만들어보자!


Objective-C 는 객체지향 언어다.  iOS 개발을 공부하기 위해 분명 이리저리 찾아봤을탠데, 객체지향(OOP)에 대해서 들어본바가 있을 것이다.  그렇다면 객체지향이란 무엇인가?  그건.. 구글링해서 알아보기로 하고, 진행해보도록 하자. 
처음에는 '대체 왜! 객체지향인가? 객체지향이 필요한가? 나는 누군가 여긴 어딘가?' 등등.. 이해하지 못하는 부분이 있을 수 있겠지만, 직접 겪어보는게 가장 빠르고 정확할꺼라는 생각에 설명은 생략한다.  

사실 여기까지 진행하면서, 이런 객체지향형으로 진행을 해야하나는가 안해야하는가 많은 고민을 했었지만, 그냥 가볍게 진행을 해도 나쁘진 않을거란 생각이 들었다.  부담없이 따라만해보고, 결과가 눈에 보인다면 이해는 여러분의 몫으로 남겨두기로 했다. 

자 그럼 다시 본론으로 넘어가서...


Command+N (새로운 파일만들기)를 클릭해서, 객체를 만들어보자. 위 스크린샷처럼 결과가 나온다면, Objective-C Class 를 선택한 후, Next를 클릭한다.


그리고 Class의 이름을 지정하는 부분이 있는데, 본 클래스는 Group이라고 칭하겠다.  Group이라고 타이핑한 후에, Subclass of에서는 NSObject를 선택한 후 Next버튼을 클릭한다.


그럼 어느 위치에 저장을 할 것인지 묻는데, 그냥 기본 Root폴더 (위 스크린샷 이미지를 참조) 에 저장한다. Create 버튼을 클릭!


자 이제, 왼쪽 파일 네비게이터를 확인해 보면, Group.h과 Group.m 파일이 생성됨을 확인할 수 있다.  Group이라는 클래스를 만들었으니 이제 Group클래스 내에 속성을 정해보도록 하자.  UI객체를 어떤걸 올렸는지 떠올려보자.  Group의 타이틀 / 대표이미지 / 태그 / 메모 이렇게 4개의 속성이 필요하다. 


Group.h의 내용부터 수정하자.  위 스크린샷을 참고해서 코드를 추가한다.


Group.m 의 내용도 위 스크린샷을 참고해서 코드를 추가한다.  
일단 Group class 의 작성은 이것이 전부다.  물론 추가되는 속성값이나 기능들이 있다면, 더 추가되거나 수정할 수도 있겠지만, 아직까진 그렇지 않다.  자 그럼 Group이라는 클래스도 만들었으니, 다시금 AddGroupViewController로 돌아가자.


- AddGroupViewController에서 Group객체를 만들자.


Group.h 과 Group.m (이하 Group 클래스) 를 만들고 코드작성까지 완료했다면, AddGroupViewController에서 해당 객체 (Group클래스)를 생성해보기로 하자. 


AddGroupViewController.m 파일 상단에, #import "Group.h" 이라는 코드를 삽입한다.
이쯤에서 아까 sqlite3.h 를 추가한 것과 다른 위치에 추가한 것이 궁금할 수도 있겠다.. 궁금하면 오백원.. (아니 사실 광고 한번 클릭.. 응?)  그냥 쉽게 생각하면 프레임워크 등은 h파일 (헤더) 그리고 내가 만든거는 m파일 에 선언한다. 물론 헤더에 선언을 해야하는 경우도 있다.  일단 이정도까지만 알면 된다. 


다시 - (void)saveGroup 메서드를 찾아가서, 위 스크린샷을 참고해서 코드를 추가한다.
아까 우리가 직접 만들었던 Group 클래스를 생성한 후, 속성값들을 넣어주는 코드다. 물론 위 코드는 완전성은 없다. 대표이미지 관련도 아직 작업하지 않았고, 태그나 메모를 작성하지 않았을 경우 등도 예외처리를 하지 않았기 때문이다.  어쨌든, 만들고, 속성을 지정한 후, release로 객체를 메모리에서 해주는 코드까지 작성했다. 

일단 여기까지 진행한 후, 저장후 빌드/런 해보도록 하자.  그리고 타이틀을 작성한 후, 저장버튼을 눌러서 위에 추가한 코드(NSLog)가 제대로 출력되는지 확인해본다. 


오늘은 진행속도를 조금 빨리했습니다.  SQLite로 저장을 하는 부분까지 하려했지만, 너무 많은 양이 될 것 같아서, 일단 객체를 만들고 속성값을 객체의 속성값에 대입하는 부분까지만 진행을 했습니다.  혹시 여기까지 진행하면서 잘 안되는 부분이나 모르는 부분이 있다면 주저없이 리플을 남겨주세요^^