6개월 전쯤 오랫만에 iOS 프로젝트를 하게되어 Xcode 새 버전을 다운로드 받고 실행해 보았다. 오래 안봤더니 생소한 인터페이스빌더의 모습에 겁을 먹고 인터페이스빌더를 사용하지 않고 개발하기로 했다. 그러다 근래가 되어서야 지인으로부터 스토리보드란 것이 있다는 이야기를 들었다. 오랫동안 손을 놓고 있었던 스모킹 카운터의 업그레이드 버전은 사용법도 익힐 겸 스토리보드를 사용해서 만들기로 했다.

'신기하게 잘 만들었구나'하며 이것저것 해보면서 만들다가 오늘 문득 타겟을 iOS 4.3으로 해도 되는지 테스트 해보기 위해 아무 생각없이 타겟을 iOS 4.3으로 수정하고 빌드를 해보았다. 'Storyboards are unavailable on iOS 4.3 and prior'란 오류가 났다. 안되는 구나 하고 다시 5.0으로 변경한 후 빌드를 하는데 또 같은 오류가 난다. Xcode를 종료하고 클린을 한후에 다시 빌드를 했는데 결과는 같다. 검색을 해보니 나만 그런 것은 아닌 것 같고... 하지만 검색해서 얻은 해결법들이 나의 경우에는 해결되지 않았다. 설마 프로젝트를 다시 만들어야 하는 것은 아닌지 Xcode 초보자로서 참으로 난감한 일이다. 그러던 중 늘 그렇듯이 소발에 쥐잡기로 빌드는 되었다.

1. 프로젝트 Deployment Target이 5.0인지 확인.
2. 스토리보드 속성중 Document Versioning에서 Deployment가 iOS 5인지와 Development가 Xcode 4.2인지 확인. 
3. 파인더에서 *.storyboard 파일을 다른 곳으로 이동(언어별로 되어 있으면 모두 이동).
4. Xcode 종료
5. *.storyboard 파일을 기존의 디렉토리로 다시 이동.
6. Xcode 재실행 후 클린
7. 빌드


Xcode 버전은 4.2.1이며 용기가 없어 확인해 보기 위해 다시 재현하지는 못했다. Xcode 버그인지 아니면 일반적인 방법이 있는데 삽질인지는 모르겠다. 
모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)


1. 빌드시 시뮬레이터 판별

#if !TARGET_IPHONE_SIMULATOR
pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
#endif
TARGET_IPHONE_SIMULATOR로 실제 아이폰에서만 실행되는 코드를 따로 관리할 수 있습니다.

2. 하위 View 검색

NSArray *subViewList = [searchBar subviews];
for (UIView *view in subViewList) {
    if ([view isKindOfClass:[UITextField class]]) {
        [(UITextField *)view setReturnKeyType:UIReturnKeyDone];
    }   
}
UIView의 subviews와 isKindOfClass를 사용하여 하위의 특정 뷰를 찾아내어 설정을 변경할 수 있습니다. UISearchBar에서 UITextField를 찾아내어 키보드의 Search 버튼의 텍스트를 Done으로 변경하는 예입니다.

- (void) setSubViewsClearColor: (UIView*)theView {
   NSArray *subViewList = theView.subviews;
   for (UIView *view in subViewList) {
       [view setBackgroundColor:[UIColor clearColor]];
       [self setSubViewsClearColor:view];
   }
}
하위 View를 모두 찾아 배경을 투명한 속성으로 변경하는 예입니다.
초기화 하는 곳에서 [self setSubViewsClearColor:self]; 와 같이 호출하여 사용합니다.
 
 
3. 사용자 데이터 저장

userLevel = [[NSUserDefaults standardUserDefaults] integerForKey:@"user_level"];
[[NSUserDefaults standardUserDefaults] setInteger:g_userLevel forKey:@"user_level"];
옵션등의 간단한 설정은 데이터베이스나 파일을 이용하는대신 NSUserDeraults를 사용하면 간단하게 저장하고 불러올 수 있습니다.

4. Rect와 Point
좌표로 많이 사용되는 Rectd와 Point에서 자주 사용되는 함수와 상수입니다.

CGRect  CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height);
x, y, width, height로 설정된 CGRect를 반환합니다.

CGRectZero
0, 0 좌표와 0, 0 크기를 가진 CGRect 상수입니다.

CGPointMake(CGFloat x, CGFloat y);
x, y로 설정된 CGPoint를 반환합니다.

CGPointZero
0, 0 좌표를 가진 CGPoint 상수입니다.

bool CGRectContainsPoint(CGRect rect, CGPoint point);
rect 사각형에 point가 속해있는지 여부를 반환합니다.

bool CGRectContainsRect(CGRect rect1, CGRect rect2);
rect1 사각형에 rect2 사각형이 속해있는지 여부를 반환합니다.

bool CGRectIntersectsRect (CGRect rect1,  CGRect rect2);
rect1과 rect2가 교차하는지 여부를 반환합니다.


5. Path

NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
어플리케이션 번들 디렉토리를 반환합니다.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
번들에 포함된 파일들은 읽기만 가능하고 쓰기가 불가능합니다. 디비와 같이 변경이 필요한 경우에는 위와같이 어플리케이션의 도큐먼트 폴더를 구해와 도큐먼트 폴더로 복사 생성해 놓고 작업합니다.


6. URL

NSURL *url = [NSURL URLWithString:@"http://www.cocoadev.co.kr"];
[[UIApplication sharedApplication] openURL:url];
지정된 웹주소를 사파리에서 오픈합니다.

NSURL *url = [NSURL URLWithString:@"mailto:abc@def.com"];
[[UIApplication sharedApplication] openURL:url];         
받는사람이 설정되어 메일 프로그램의 새로운 메시지가 실행됩니다.

NSURL *url = [NSURL URLWithString:@"tel:02-111-2222"];
[[UIApplication sharedApplication] openURL:url];
지정된 번호로 전화를 겁니다.

모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)
  1. Favicon of https://sharphail.tistory.com BlogIcon 샤해 2013.02.05 17:39 신고  댓글주소  수정/삭제  댓글쓰기

    유익한 정보에 감사드립니다 ㅎㅎ 트랙백과 함께 링크 좀 빌려갈게요~



아이폰 3.0 SDK 부터는 accelerometer를 사용하지 않고도 UIResponder에 추가된 motion 이벤트 처리 메소드를 구현함으로써 간단하게 사용자의 흔들기 동작을 체크할 수 있습니다. 저도 처음 사용해 보면서 간단한 내용들을 정리해 보았습니다.

1. First responder 되기
사용자의 흔들기 이벤트를 처리할 ViewController는 그 자신이 First responder가 되어야 합니다. becomFirstResponder 메소드를 호출하고 canBecomeFirstResponder 메소드에서 YES를 반환합니다.

  1. - (void)viewDidAppear:(BOOL)animated {
  2.     [super viewDidAppear:animated];
  3.     [self becomeFirstResponder];
  4. }
  5.  
  6. - (BOOL)canBecomeFirstResponder {
  7.     return YES;
  8. }

viewDidAppear는 코드에서 서브뷰로 추가될 때만 호출됩니다. IB에서 바로 Window에 View를 추가하였으면 awakeFromNib등의 메소드에서 becomFirstResponder를 호출하셔야 합니다.

2. motion 메소드 구현
이후로는 간단합니다. 사용자의 흔들기가 시작되면 해당 motionBegan이 호출되고 종료될 때 motionEnded가 호출됩니다. 지나치게 많이 흔들거나 하여 유효하지 않은 흔들기로 판단될 때는 motionCancelled가 호출됩니다.

  1. - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
  2.     NSLog(@"Shaking start");
  3. }
  4.  
  5. - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
  6.     NSLog(@"Shaking end");
  7. }
  8.  
  9. - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
  10.     NSLog(@"Shaking cancel");  
  11. }
  12.  

motionEnded 메소드에 사용자의 흔들기가 끝난 후 실행할 코드를 추가하면, 간단하게 흔들기를 지원할 수 있습니다.

모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)
  1. TODD 2009.09.29 12:59  댓글주소  수정/삭제  댓글쓰기

    좋은 포스트 내용 잘 보았습니다.
    질문이 하나 있습니다.

    아이폰을 흔드는 것에 대해
    motionBegan, motionEnded, motionCancelled 등의 이벤트가 발생한다고 하셨는데요.
    저는 이런 이벤트가 존재하는지 조차 알기 어렵네요..

    상황에 맞는 이런 이벤트들의 리스트를 쪼로록 볼 수 있는 방법이 있나요?
    Visual Studio 환경에 익숙한 저로서는 OnKeyDown 같은 On~~ 으로 시작하는 이벤트 리스트 같은 것을 기대하고 있습니다.

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2009.10.01 14:56 신고  댓글주소  수정/삭제

      ESC나 F5 키를 누르시면 일치하는 메소드 리스트를 볼 수 있습니다. Help 메뉴의 리서치 어시스턴트를 활용하시면 관련 문서를 좀 쉽게 찾을 수 있습니다.

  2. Favicon of http://blog.windclimb.com BlogIcon 문군 2009.10.14 19:58  댓글주소  수정/삭제  댓글쓰기

    언제나 좋은 내용만 알려주시는 쩔님^^

    가끔 들어와서 업데이트 되엇나 쳐다보고 갑니다.

    저도 맥을 사용하는 유저인데...쩔님에게 많이 배우고 있습니다.

    항상 좋은 내용 많이 많이 올려주세요^^

  3. Favicon of http://icarusx.tistroy.com BlogIcon ICARUSX 2009.11.30 16:23  댓글주소  수정/삭제  댓글쓰기

    또 왔습니다 ^^
    아이폰 구매신청한상태인데 않오는군요 ㅎㅎ
    뭐 와도.. 구지 만들어서 테스트해볼만한게 없지만 ㅎㅎ

    좋은 강좌또보고갑니다 ^^
    아.. 그리고 결혼한답니다 ^^

    이리저리 인터넷에 아는 지인께 글남기는중.
    코코아데브님에게도 소식을 ㅋㅋ

    http://www.icarusx.com/icarusx/index.php?BD_NO=1023

    좋은 하루되세요 ㅎ

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2009.12.01 10:31 신고  댓글주소  수정/삭제

      이카루스님은 좋은 소식 풍년이네요. 이번에 예약하셨군요. 전 나중에 사기로 했습니다.

      가장 좋은 소식은 결혼 소식이네요. 축하드리며 행복한 가정 꾸리시기 바랍니다. :)

  4. 나그네^^ 2010.04.05 02:39  댓글주소  수정/삭제  댓글쓰기

    안녕하세요
    이 메소드를 cocos2d에서 사용할려면 어떻게 사용해야하는지 알려주실수있으신지요

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2010.04.06 18:23 신고  댓글주소  수정/삭제

      ViewController에서 받는 메시지니 해당 뷰클래스를 하나 만드셔야 될 것 같습니다. 구조를 어떻게 하실지 모르겠지만 cocoas2d의 Director에서 attach하는 뷰에 뷰컨트롤러를 만들어서 해당 메시지를 받으시면 될 것 같습니다.

  5. 수세미 2017.02.09 10:36  댓글주소  수정/삭제  댓글쓰기

    2017년에도 이글이 유효하네요. shake 잘 동작하네요. ^^



이전에 포스팅한 "NSXMLParser로 RSS 읽어오기"와 유사한 방법으로 구글 날씨 RSS를 가져오는 것을 만들어 보았습니다. 그런데 한글이 깨져나와 확인해 보니 문자셋이 euc-kr이었습니다. 문자셋을 확인하는 방법은 URLConnection의 델리게이트 메소드에서 확인할 수 있습니다.
  1. - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
  2.     NSLog(@"Encoding: %@", [response textEncodingName]);
  3. }

전송이 끝난 후에 아래와 같이 NSData를 euc-kr을 utf-8로 변환하여 사용할 수 있습니다. 변경된 data를 NSXMLParser의 initWithData의 인자로 사용하면 됩니다.
  1. - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  2.     NSString *str = [[NSString alloc] initWithData:receiveData encoding:0x80000000 + kCFStringEncodingDOSKorean];
  3.     NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
  4.    
  5.     NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
  6. .
  7. .
  8. .
  9. }

한가지 이상한 점은 웹브라우저에서 확인하면 같은 URL이지만 utf-8로 넘어 옵니다. 아마 서버에서 헤더를 검사에서 각각 다른 인코딩으로 넘겨주는 것이 아닌가 하는 생각이 듭니다. 헤더의 항목들을 변경해서 보았는데 User-Agent를 설정해서 보내보니 euc-kr이 아닌 utf-8로 넘어 왔습니다.
  1.     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/ig/api?weather=seoul"]];
  2.      
  3.     [request addValue:@"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ko; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2" forHTTPHeaderField:@"User-Agent"];
  4.  
  5.     xmlConnection = [[NSURLConnection alloc]
  6.                      initWithRequest:request
  7.                      delegate:self];


구글의 날씨 API에서는 이와 같이 User-Agent를 보내면 utf-8로 보내기때문에 위와같이 인코딩의 변환이 필요하지 않습니다. 아마 예측가능한 User-Agent는 utf-8로 보내고 그외에는 euc-kr로 보내는 것 같습니다. 이는 영문도 마찬가지이며 http://www.google.com/ig/api?weather=seoul와 같이 co.kr에서 com으로 변경하면 문자셋이 iso-8859-1로 넘어 옵니다. User-Agent를 추가하면 역시 utf-8로 넘어 옵니다.



이전부터 그냥 복사해서 올렸는데 오늘 보니 아래와 같이 나오는 건 너무 보기가 힘든 것 같아서, 예제코드를  Quick Highlighter를 사용해서 정리해 보았습니다.
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/ig/api?weather=seoul"]];
     
    [request addValue:@"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ko; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2" forHTTPHeaderField:@"User-Agent"];

    xmlConnection = [[NSURLConnection alloc]
                     initWithRequest:request
                     delegate:self];

보기도 조금 나아지지만 해당 클래스에 대한 애플의 문서로 바로 링크가 되는 것도 좋은 것 같습니다.

모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)
  1. Favicon of http://icarusx.tistory.com BlogIcon ICARUSX 2009.10.29 18:46  댓글주소  수정/삭제  댓글쓰기

    또 잘보고갑니다 ㅎㅎ 매번 찾아봐야하는데..
    웹쪽이 급해서 우선공부를 하고있는지라..

    도움만 받고 갑니다 ^^

  2. Favicon of http://icarusx.tistory.com BlogIcon ICARUSX 2009.11.10 02:55  댓글주소  수정/삭제  댓글쓰기

    ㅎㅎ 또 방문했습니다 ㅎㅎ
    제가좀 알고있는 블로그도 많이 없고 ㅎㅎㅎ
    유독 코코아데브님 블로그만 자주오게됩니다 ㅎㅎ

    빨리빨리 아이폰SDK를 간파해야하는데 ㅠ_ㅠ

    http://www.icarusx.com - ICARUSX 라는 php+Ajax 무료 오픈 게시판 배포일정을
    잡고 매일 나홀로 철야 작업중이다 보니..

    도무자 아이폰관련 공부할 시간이 나질않는군요;;
    몇일있음 오픈이라.. 오픈후에 사용해줄 사람이 있을지 의문이지만..
    바빠지건 말건을 떠나.. 조금이나마 더 시간을 투자해서 공부해야할듯해요

    조금더 깁숙!!히 공부시작하면 귀찮게 해드릴 지도 모르겠습니다 ㅎㅎㅎ

    아무튼 겨울이 성큼! 다가왔네요.. cocoadev님 감기조심하시고 플루도 조심하시구요
    올겨울은 유난히.. 춥네요.. 가난해져서 그런가 -_-;; 쿨럭;;

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2009.11.16 09:47 신고  댓글주소  수정/삭제

      대단한 것을 만들고 계시네요. 사용하는 사람이 적더라도 만드는 동안의 경험의 이카루스님에게 소중한 자산이 될 것 같습니다.

      오늘도 무척 춥네요. 건강 조심하시고요. ^^

  3. Tim 2010.03.05 16:43  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사 드립니다.

    그런데, 예전에 올려주신 내용 (http://cocoadev.co.kr/245) 과 위의 내용을 적용해서 해 보았는데요..

    didStartElement와 didEndElement는 정상적으로 호출이 되는데,
    foundCharacters는 호출이 되지 않습니다.
    (다른 RSS는 잘 되는데 구글의 날씨:http://www.google.com/ig/api?weather=seoul 만 안되는 것 같습니다.)

    제가 뭐를 잘 못한것 아닌지 조언을 부탁 드립니다.
    혹시 가능하시면, http://cocoadev.co.kr/245번 처럼 소스를 올려 주시면 더 이해가 쉬울것 같습니다.

    그럼.. 우울한 날씨지만.. 주말 잘 보내시기를..^^

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2010.03.08 09:35 신고  댓글주소  수정/삭제

      안녕하세요. 소스는 이부분만 따로 구현한 것이 없어 올려 드릴수가 없네요.

      foundCharacters가 호출되지 않는다면 그 전에 어떤 오류가 있는 것 같습니다. 오류 발생시 호출되는 델리게이트 메소드들을 구현하셔서 확인해 보셔야 할 것 같습니다.

      그럼 좋은 하루 보내세요. ^^

  4. Tim 2010.03.15 17:31  댓글주소  수정/삭제  댓글쓰기

    제가 xml에 대한 이해가 부족했던것 같습니다..^^;

    didStartElement에서
    NSString * strData = [attributeDict objectForKey:@"data"]; 를 사용하여
    Data들을 추출 하였습니다.

    혹시..
    Google에서 지역 정보를 얻어오는 부분에 대해 조언을 구할 수 있을까요..?
    네이버의 http://dev.naver.com/openapi/apis/data/local 와 같은 OPENAPI가
    구글에서는 어떻게 해야 하는지 도통 모르겠습니다.

    아래 두군데를 조금 찾아 봤는데..
    제가 잘 몰라서인지, 해결책이 안보이네요..^^;
    [구글 Open API for Object-c] http://code.google.com/p/gdata-objectivec-client/
    [구글 로컬 검색] http://code.google.com/intl/ko-KR/apis/ajaxsearch/local.html

    관련 내용에 대해 문의 드립니다.

  5. Tim 2010.03.18 11:22  댓글주소  수정/삭제  댓글쓰기

    넹.. 감사합니다.

    Local Search 쪽에서 원하는 Data를 가져 올수 있었습니다.
    ajax나 주변 여러가지 개념을 잘 모르는 상태이다 보니..
    한참을 헤맸던것 같습니다..

    다시한번 감사드리고요..
    좋은 하루 되시구요..^^

  6. tudo 2010.04.15 17:17  댓글주소  수정/삭제  댓글쓰기

    didStartElement에서
    NSString * strData = [attributeDict objectForKey:@"data"]; 를 사용하여
    Data들을 추출 하고 어떻게 부려주나요?
    [[cell textLabel] settext:[dict objectForKey:@"city"]];
    [[cell textLabel] settext:strData];
    이렇게 뿌려주면 될까요?

  7. cyan 2010.11.19 13:03  댓글주소  수정/삭제  댓글쓰기

    아이폰개발에 처음 접하고 나서 매우 많은 도움을 받고 있습니다. 이런 글로나마 감사를 드립니다.

    그런데 위의 예제에서

    NSString *str = [[NSString alloc] initWithData:receiveData encoding:0x80000000 + kCFStringEncodingDOSKorean];

    라는 부분은 release 를 어디서 해주어야 하는지요?
    Instrument에서는 저 부분에서 메모리 leak이 생긴다고 하는데,
    일단, connectionDidFinishLoading 메소드 내에서 해주면 어플이 그냥 죽어버립니다.

  8. 당근구리 2011.03.02 09:55  댓글주소  수정/삭제  댓글쓰기

    잘 보고 갑니다. 퍼가요~



NSURLConnection을 이용하면 간단하게 해당 웹서버의 html, xml등의 내용을 쉽게 가져올 수 있습니다.

1. 연결
connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.cocoadev.co.kr/rss]] delegate:self];

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

대상 URL을 인자로 NSURLConnection을 생성합니다. 위는 이 블로그의 rss를 주소로 생성하는 예입니다. delegate는 self로 현제 오브젝트로 지정합니다. delegate로 지정된 오브젝트는 NSURLConnection의 delegate 메소드를 구현하고 메시지를 받을 수 있습니다.

UIApplication의 networkActivityIndicatorVisible을 YES로 하여 데이터 수신 시 좌측과 같이 상단 상태바에 인디케이터가 회전하는 에니메이션으로 사용자에게 데이터 수신중임을 알려줍니다. 기본값은 NO로 되어 있습니다.

2. delegate 메소드 구현
NSURLConnection 생성시 delegate로 지정된 클래스에서는 해당 이벤트 처리 메소드를 구현해야 합니다. 가장 자주 사용되는 delegate 메소드는 데이터 수신, 연결 종료, 오류발생등에 관련된 것들입니다.

1) 데이터 수신
* connection:didReceiveData:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
   [receiveData appendData:data];
}
데이터가 수신될 때 불려지면 웹서버로 부터 받은 데이터가 NSData 형태로 넘어 옵니다. NSMutableData의 appendData 메소드를 이용하여 수신되는 데이터들을 차례대로 저장합니다.

2) 연결 종료
* connectionDidFinishLoading:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
   NSString *str = [[NSString alloc] initWithData:receiveData
encoding: NSUTF8StringEncoding];
   NSLog(@"%@", str);
   [str release];

   [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
데이터가 모두 수신되어 웹서버와의 연결이 종료되었을 때 호출됩니다. 이곳에서 원하는 작업을 하거나 다른 오브젝트가 처리하도록 할 수 있습니다. 위는 NSData로 저장된 데이터를 NSString으로 변환하여 출력하는 예입니다. xml이라면 NSXMLParser를 사용하여 데이터를 처리할 수 있습니다.

3) 오류 발생
* connection:didFailWithError:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
   NSLog(@"Connect error: %@", [error localizedDescription]);   

  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
네트워크가 연결되지 않았을 경우등 오류가 발생하였을 때 호출되는 메소드 입니다. 해당 페이지가 없음을 나타내는 404 오류등은 이 메소드가 호출되지 않습니다.

모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)
  1. 2009.07.10 17:13  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2009.07.10 19:45 신고  댓글주소  수정/삭제

      str에 NSData로 수신된 데이터를 넣으셨나요? 아니면 NSData를 alloc을 하지 않고 사용하셨으면, 오브젝트가 참조시 이미 메모리에서 릴리즈되었는지도 모르겠습니다.

  2. 2009.07.22 15:13  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2009.07.22 17:50 신고  댓글주소  수정/삭제

      필요한 아무 클래스에다 구현하시면 됩니다. 처음에 테스트 해보실려면 AppDelegate가 구현된 클래스나 ViewController 서브 클래스에서 구현하시면 될 것 같습니다.

  3. 2009.07.22 22:23  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  4. 2010.04.06 19:47  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2010.04.07 15:31 신고  댓글주소  수정/삭제

      오류메시지 없어 정확히 무슨 오류인지는 모르겠습니다만...

      NSURLConnection *connection;

      으로 선언을 안하신 것 같습니다.

  5. html 2010.07.17 04:35  댓글주소  수정/삭제  댓글쓰기

    html을 nsstring으로 출력 할려면 어떻게 해야하죠?

  6. 2010.12.10 01:29  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  7. artesign 2012.08.16 11:02  댓글주소  수정/삭제  댓글쓰기

    팬입니다.. 정말 제가 필요한 정보들이 다 요약정리가 잘되어있네요 ㅜㅜ 파일입출려과 nsurlconnection 등등 ㅜㅜ



몇일전에 어플을 버젼업 하면서 큰 실수를 했습니다. UITableViewController를 UIViewController로 교체하면서 Edit 버튼을 클릭해도 테이블뷰에서 삭제모드로 변경이 안되는 버그를 확인 못하였습니다. delegate와 datasource 프로토콜의 필요한 메시지들은 다 구현이 되어 있는데 안되더군요.


가능하면 다시 UITableViewController로 돌아 가지 않는 방법을 찾아 보았는데, UIViewController의 setEditing 메소드를 이용하는 방법이 있었습니다. 사용자가 Edit/Done 버튼을 클릭할 때 불려지는 메소드인데 인자로 넘어오는 editing을 참고하면 테이블뷰의 에디트 모드가 UITableViewController일때와 동일하게 동작합니다.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

    resultTable.editing = editing;

    [super setEditing:editing animated:animated];

}


조금 더 확인을 해봐야 겠지만 아직까지는 문제가 없는 것 같습니다. 기능도 몇개 없는데 귀찮아서 테스트도 안해보고 올렸다니 제 자신이 한심하네요.

모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)