출처 : 애플의 개발자 가이드 읽는 순서

애플 개발툴의 Framework는 모든 클래스들의 상세한 내용을 기술하는 레퍼런스 문서를 포함합니다. 하지만 애플은 이 레퍼런스 문서 외에, 주로 '~Guide' 라는 제목이 붙은 공식 개발 문서들을 제공하는데요, iOS 개발을 공부해가면서 실제로 많은 도움을 주는 꼭 필요한 문서들이라고 할 수 있죠.

하지만 이 애플 문서에도 큰 문제점이 두가지 있는데, 우선 영어로 되어 있다는 점이 있고.... (일부 문서는 번역되어 있는 경우도 많습니다)

또 다른 문제는 어떤 문서를 어떤 순서로 공부해야 하는지 알기 어렵다는 점입니다. 마치 아주 좋은 교과서가 있는데, 챕터 별로 잘려져 있어서 어떤 순서로 읽는 지 알 수 없는 경우랄까요? 

이번 포스팅에서는 이 두번째 문제에 도움이 되고자 제 나름대로의 생각을 정리해보도록 하겠습니다. 

 우선 읽고 볼 문서
  • The Objective-C Programming Guide 
  • Memory Management Programming Guide
  • iOS Application Programming Guide
  • iOS Development Guide
  • Cocoa Fundamentals Guide
  • Resource Programming Guide
  • View Programming Guide for iOS
  • View Controller Programming Guide for iOS
  • Event-Handling Guide for iOS
  • Key-Value Coding Programming Guide
  • Key-Value Observing Programming Guide
  • Xcode Project Management Guide

 결국 읽어야 할 문서

  • Table View Programming Guide for iOS
  • Scroll View Programming Guide
  • Information Property List Key Reference 
  • Drawing and Printing Guide for iOS / Core Graphics Framework Reference
  • Core Animation Programming Guide / Core Animation Cookbook
  • NSInvocation Class Reference
  • SDK Compatibility Guide
  • Settings Application Schema Reference
  • Concurrency Programming Guide
  • Interface Builder User Guide
  • Instruments User Guide, Shark User Guide
  • Secure Coding Guide
  • Internationalization Programming Topics
  • Cocoa Performance Guidelines
  • Error Handling Programming Guide, Exception Programming Topics
  • Property List Programming Guide / User Defaults Programming Topics

 필요하면 찾아볼 문서 (중요)>

  • Core Data Programming Guide
  • CFNetwork Programming Guide / CFNetwork Framework Reference
  • Device Features Programming Guide
  • Location Awareness Programming Guide
  • Text, Web, and Editing Programming Guide for iOS
  • Camera Programming Topics for iOS
  • Keychain Services Programming Guide
  • Event Kit Programming Guide (calendar) / Address Book Programming Guide for iOS
  • OpenGL ES Programming Guide for iOS
  • Quartz 2D Programming Guide
  • Core Audio / Audio Queue Services Programming Guide / Audio Session Programming Guide
  • Undo Architecture
  • File-system performance guidelines

 생각나면 한번쯤 읽어 볼 문서 

  • iOS Human Interface Guidelines
  • Apple Human Interface Guidelines
  • Design Patterns: Elements of Reusable Object-Oriented Software
  • Bundle Programming Guide
  • Coding guideline for Cocoa (naming guideline)

 필요하면 찾아 볼 문서 (덜 중요) 

  • System Messaging Programming Topics in iOS
  • Core Telephony Framework Reference
  • Stream Programming Guide
  • URL Loading System Programming Guide / Apple URL Scheme References
  • Multimedia Programming Guide

  • Archives and Serializations Programming Guide
  • External Accessory Programming Guide
  • Timer Programming Topics
 가장 나중에 읽을 문서 (Mac OS X와 겹치는 것이 많음)
  • Cocoa Event-Handling Guide / How Cocoa Applications Handle Apple Events
  • Foundation Framework Reference
  • Cocoa Drawing Guide (View hierarchy)
  • Threading Programming Guide
  • Objective-C Runtime Programming Guide
  • Window Programming Guide
  • Model Object Implementation Guide
  • Code Loading Programming Topics
  • Preferences Utilities Reference (CF)
  • Distributed Objects Programming Topics
  • Cocoa Scripting Guide
  • Document-Based Applications Overview


'Objective C' 카테고리의 다른 글

터치 중(hold)에만 발생하는 이벤트 처리  (0) 2014.12.22
데이터 송신 수신  (0) 2014.10.25
UIWebView에서 HTML 가져오기  (0) 2014.10.25

개발 중인 어플 기능으로 터치를 유지하고 있을 때 발생하는 이벤트를 만들고 싶어서 궁리했다.

구글이라는 신의 한수가 있었지만 어떤 키워드로 검색해야하는지 조차 몰라서 실패.

(touch hold? holding? event... ;;???)


어떻게 접근할지 막막해서 상상력을 동원.

NSTimer를 이용하는 방법으로 가장 근접하게 작성했으나 구현 실패했고 코드도 굉장히 지저분.

그러다 UILongPressGestureRecognizer를 이용해서 의외로 쉽게 해결할 수 있었다.


- (id) init {


    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];

    longPress.allowableMovement = 20;

    longPress.minimumPressDuration = 0.5f;

    [self.view addGestureRecognizer:longPress];

    [longPress release]; 

}


- (void)longPress:(UILongPressGestureRecognizer*)gesture {

    

    if ( gesture.state == UIGestureRecognizerStateBegan ) {

        

        //이벤트 처리

        isHeld_ = YES;


    }

    

    else if (gesture.state == UIGestureRecognizerStateEnded) {

        

        if (isHeld_ == YES) {


            //이벤트 처리

            isHeld_ = NO;

        }

    }

}



'Objective C' 카테고리의 다른 글

애플의 개발자 가이드 읽는 순서  (0) 2015.02.21
데이터 송신 수신  (0) 2014.10.25
UIWebView에서 HTML 가져오기  (0) 2014.10.25

어디서부터 어떻게 설명 드려야 할지 모르겠어서 
http 통신에 기초해서  xml 파서 등등의 상위 레벨보다는 그 기초가 되는 부분부터 해서

질문하신 분의 상황에 맞춰서 해당 부분만 설명 드리겠습니다.

소켓 방식까지 포함해서 전체적으로 포괄적으로 설명 드리기엔........양이 너무 많네요.

하여튼 제가 아는 한에서 설명 드리면

 

1. [서버]  - [클라이언트] DATA 통신은 간단하게 말해서 서버와 클라이언트 가 DATA 를 0101010101 형태로 주고 받는 

   것입니다.  이 01010 들이 모여서 <html>이 되기도 하고 <xml> 이라는 문자가 되기도 하는 것이지요.

   - 보통 웹페이들은 [클라이언트] 가 [서버]에서 뿌려주는 DATA를 가져와 이를 익스플로어라는 프로그램이 파싱해서 

     text/문자로 사용자에게 보여주는 것이죠.

 

2. XML 파서 예제 소스를 열어 보면 NSURL 을 사용 해서 [서버]에 [DATA]를 Request 를 할 것입니다.XML 파서용 NSURL 

   Request 라고 해서 특별 한 것이 아니라 txt나 이미지 기타 DATA를 Request 할 때와 같습니다. DATA 는 010101010101 형태

   이고 [서버]는 이것을 요청에 따라 뿌려주면 되는 것이고 [클라이언트]는 이 정보를 가지고 익스플로어가 웹페이지를

   보여주는 것 처럼 이미지,xml문서,txt 문서로 분석(파싱)하면 됩니다. NSURL 이 아니라 다른 Nerwork 방식이라도 이 부분은 

   같습니다. 어떻게 가져 오느냐 의 문제지 어떤 DATA를 가져 왔느냐는 그 DATA를 가져와서 분석 하는 놈에 따라 틀린 거니까요

 

 

위의 두가지 개념에 대해 이미 알고 계시거나 제 글을 보고 이해가 되셨나요?

다시 한번 위 과정을 요약해서 말씀 드리면 

 

- [서버]는 DATA 를 보낸다

- [클라이언트]는 DATA 를 받는다. (Connector 가 해주는 역할(대표적으로 NSURL))

- [클라이언트]는 DATA 를 분석한다.(Parser 가 해주는 역할(글쓴이께서 사용하실 XML Parser 가 한 예 입니다.)

 

이렇게 크게 말씀 드릴 수 있겠네요.

 

이제 글쓴이 께서 원하시는 동작을 단계별로 풀이해서 설명 드려 보겠습니다.

 

1. [클라이언트]는 서버에 DATA를 Request 한다.

    - 브라우저 창에 http://www.naver.com 이라고 주소를 치고 엔터를 치는 것과 같은 동작

    - NSURL 에서는 Request 를 하는 동작

 

2. [서버]는 [클라이언트]의 요청에 따라 DATA들을 write 해줍니다.

   - ASP 로 하면 response.write 가 되겠죠.(<html><table>어저꾸저쩌구</table></html> )

     xml이라고 쳐도 다를 건 없습니다. (<html><table>어저꾸저쩌구</table></html> ) 대신 XML 구문에 맞춰서

     (<xml></xml>) 로 write 만 해주시면 됩니다.

   - 다른 언어도 마찬 가지입니다. write 만 해주시면 됩니다. 해당 http://aaa.bbb:8080 을 브라우저에 넣었을 때

     소스 보기로 해당 페이지 내용이 보이기만 하면 됩니다.

   - http://aaa.bbb:8080  를 [클라이언트]가 열었을 때 MySQL 로 Data 를 가져와 화면에 XML 구문에 맞춰

    보내고 싶은 DATA 를 뿌려주시면 됩니다.

 

3.[클라이언트] 는 [서버]가 write 해준 DATA 를 얻어 옵니다. 보통 저는 이걸 긁어 온다고 합니다.

 

4.[클라이언트]는  [서버]가 wirte 해준 DATA를 받아서 분석 합니다.

   - 웹브라우저로 치면 html 태그 등을 구분해서 이미지/text/표/그림 등의 형태로 DATA 를 바꿔 브라우저 화면에 보여주는

    작업입니다.

   - 말씀 하신 XML파서 는 이 DATA 를 가지고 xml 태그를 기준으로 DATA와 구분자 등을 구분 하는 녀석이죠.

 

이렇게 4단계를 거치면 XML 을 받아 오는 과정이 끝납니다.

XML 이라고 해서 특별히 뿌려 줄때  XML 파일로 만들 필요는 없고 XML 파일 안에 들어갈 TEXT 들을

그냥 뿌려줘도 됩니다. 

 

웹페이지도 메모장에서 여시면 소스코드가 그대로 보이는 것처럼

DATA자체는 그냥 형식에 맞게만 주고 받으면 됩니다.문제는 그것을 분석하는 녀석이죠.

분석하는 녀석이 메모장이면 text 형태로 다 보여주는 것이고 익스플로러 면 이미지/TEXT/표 등의 형태로 보여주는 거죠.

 

이렇게 http방식으로 request 에 의한 write 방식 말고 파일 자체를 받으시려면 socket을 열어 사용 하셔야 할텐데 

그렇다면 매번 클라이언트의 요청이 있을 때마다 file을 생성하고 write 해주는 서버를 구성 하셔야 할텐데

질문자의 글을 보니 이것보다는 웹페이지를 만들고 누군가 해당 페이지에 접근 했을때

MySQL 을 이용해서 데이터를 가져와 화면에 XML 형태로 해당 DATA를 write 하는 방식을 사용 하시는 것이

익숙 하실 것 같아 위의 방식 대로 설명 했습니다.

 

자 그럼 위에 말씀 드린 것을 토대로 예제 소스를 하나 올리겠습니다.

제가 직접 개발한 소스는 아니고 다른 고마우신 분이 올려주신 소스를 활용해서 사용 중입니다.

그분이 이글을 보신다면..고맙다는 말 전하고 싶네요

NSURL 을 사용 했습니다.

 

[self requestUrl:@"http://www.naver.com" ];

 

을 하시면 naver.com의 메인 페이지의 소스 코드가

만드신 xml 페이지 주소를 넣는다면 xml 구분이 찍힐것입니다.

XML 파서를 검색 해 보시면 아래에서 receivedData 를 가지고 파싱하는 예제가 많으니

해당 예제를 보고 하시면 될 듯 합니다.

저도 아래 소스에 파서부분은 검색해서 찾은 소스를 기본으로 붙여서 만들 었습니다.

파서 소스는 예제 소스가 많은 편이라 쉽게 붙이 실수 있을 것입니다.

 

쓰다보니 양이 어마 어마 해졌네요.....

프로젝트 중간에 짬이 난게 다행이네요..^^

저도 여기서 다른 분들 도움을 많이 받아서...그냥 지나치치 못하고 주저리 주저리 남겨 봅니다.

그럼 좋은 개발 하시길 빕니다.

 

NSString  *mData;
NSURLResponse *mNSURLResponse;
NSMutableData *receivedData;

 

//1번 단계: requestUrl

//2번은 서버가 해줄일

//3번 단계 :didReceiveData

//4번 단계 :connectionDidFinishLoading

 

- (BOOL)requestUrl:(NSString *)url {
  // URL 접속 초기화
  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] 
                                                  cachePolicy:NSURLRequestUseProtocolCachePolicy 
                                                   timeoutInterval:15.0]; 

 

 // GET 방식
 [request setHTTPMethod:@"GET"];

 

 // POST 방식은 
 // [request setHTTPMethod:@"POST"]; // POST로 선언하고
 // [request setHTTPBody:[bodyString dataUsingEncoding:NSUTF8StringEncoding]];

 // 전송할 데이터를 변수명=값&변수명=값 형태의 문자열로 등록

 // 헤더  추가가 필요하면 아래 메소드를 이용
 // [request setValue:value forHTTPHeaderField:key];

 

 NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

if (connection) { 
       receivedData = [[NSMutableData data] retain]; // 수신할 데이터를 받을 공간을 마련
       return YES;
 }

 return NO;
}

 

//DATA 가 한번에 전체가 오는 것이 아니라 네트워크 상태에 따라 조금 씩 오기때문에 DATA 가 올때마다 호출 됩니다. 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
     [receivedData appendData:data]; 
}

 

//맨처음 DATA 를 주고 받기 시작 했을 때 Header 가 옵니다. 요청에 의한 정보가 옵니다.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)aResponse {
   [receivedData setLength:0]; 
   mNSURLResponse = aResponse;
}

 

//에러가 발생 했을 때 옵니다.
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
   NSLog(@"Error : ", [error localizedDescription]);
}

 

//모든 DATA 를 받았을 때 호출 됩니다.
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

 //받은 receivedData 를 UTF8의 TEXT 형태로 바꿔 줍니다.
 mData = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 

 

NSLog(@"%@",mData); //mData를 찍어 봅니다. url 에 www.naver.com 을 넣었다면 해당 페이지에서 소스 보기 했을 때 나오는 구문들이 나올 것입니다.

 

//파서 를 붙인다면 여기다 붙이세요 receivedData 를 가지고 붙이시면 됩니다.

 


 [urlConnection release];
 if(receivedData!=NULL){
   [receivedData release];
   receivedData=NULL;
 }
}

 


출처 : http://cafe.naver.com/mcbugi/42519 中 최게바라 답변


UIWebView에서 HTML 가져오기

NSString* html = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];



'Objective C' 카테고리의 다른 글

애플의 개발자 가이드 읽는 순서  (0) 2015.02.21
터치 중(hold)에만 발생하는 이벤트 처리  (0) 2014.12.22
데이터 송신 수신  (0) 2014.10.25

+ Recent posts