티스토리 툴바


(오오오... 고기는 씹어야 제맛이라는 말... 너무 좋아.. 꼬끼..)


iOS5가 업데이트 되면서... 다양한 기능들이 추가 되었다...
내가 알기로는 대략 200 여 가지 기능이 추가 된것으로 알고 있지롱...

 iPhone 4GS 가 나와서 .. 5G를 기대한 전세계인들에 혹독한.. 평을 받고, 주식이 떨어지는
우여곡절.. 결국  
스티븐 잡스가 떠나고... 마지막 유작이라는 평을 받으며.. 인기 급상승 중인...

암튼 요즘 삼성과의 특허분쟁으로 전세계가 떠들석 하구...
seri 라는 앱도 인기 폭발(국내에는 내년 3월에 한국어 인식되는것이 나온다고 하던데 모르겠다..) 

다른 내용은 아니고 오늘은 iOS5 에서 트위터를 본격적으로 지원하는 내용의 링크를 걸어 본다.
우선 사내 개발중인 프로젝트상에서는 트위터 보단 페이스북 지원이 더 필요한 건 사실이지만;;;

곧 .. 나오지 않을까? 글쎄....

iOS5에 내장된 Twitter.framework 사용하기

음.. 정보공유는 참으로 아름다운 것같습니다. ㅎㅎㅎ

(난 이래서 개가 좋아~)

<TCP, UDP Socket Class 라이브러리>
<기본 클래스를 확장한 라이브러리>
<iPhotoDiary, 육아일기 어플리케이션>
<DropBox를 통한 파일 공유 API 사용 예제 소스>
<XML Parser> ------------------------------------------------------------------------------
KissXML : (read/write)
여러가지 XML Parser에 대한 성능 비교 및 사용 용도 설명
<zip/unzip lib> ------------------------------------------------------------------------------
<AVPlayer: LGPL로 FFmpeg, SoundTouch를 사용했다고 나오네요>
<무인코딩 동영상 플레이어 VLC iPhone, iPad>
<web server>
<bar code, QR code>
<push notification service 관련 provider>

<web 게시판과 연동>

http://cocoadev.tistory.com/#recentTrackback에서 공개한 내용임.
* 이미지 편집 함수 모음( 스케일, 회전, crop 등)
  • 다양한 UI 구현
  • 테이블뷰셀 커스터마이징
  • HTTP GET/POST 요청
  • XML 파싱
  • 사진 앨범, 카메라, 지도 이미지 접근
  • 맵뷰 및 위치정보
  • 푸시 노티피케이션

<여러 UI 모음: photo viewer, etc>
http://github.com/facebook/three20 (초기에는 facebook 어플이었으나 현재는 여러 UI 모음으로 바뀜 )

<map>

<E-mail>
<달력>
http://ved-dimensions.blogspot.com/2009/04/iphone-development-creating-native_09.html

<sqlite>

<계산기>

<트위터 클라이언트>
http://github.com/blog/329-natsuliphone-iphone-twitter-client
http://code.google.com/p/tweetero/

<facebook>

<rss reader>
http://code.google.com/p/iphone-simple-rss-aggregator/

<ebook reader>
http://code.google.com/p/iphoneebooks/

<blog>
http://iphone.wordpress.org/

<백업, 동기화>
http://www.funambol.com/solutions/iphone.php
http://code.google.com/p/gris/ (구글 리더 동기화)

<time tracking>
http://github.com/freshbooks-addons/freshbooks-iphone-project

<게임>
http://code.google.com/p/cocos2d-iphone/
http://code.google.com/p/tris/ (테트리스)
http://code.google.com/p/mintgostop/ (고스톱)

<google toolbox>

http://code.google.com/p/google-toolbox-for-mac/


<택배>

<이미지 프로세싱>

http://code.google.com/p/simple-iphone-image-processing/


<증강현실>
http://www.iphonear.org/

<coverflow 대체 구현>
http://apparentlogic.com/openflow/
http://www.chaosinmotion.com/flowcover.m (매가박스 어플에서 참고함)

<정규표현식 라이브러리>
http://blog.mro.name/2009/09/cocoa-wrapped-regexh/
http://regexkit.sourceforge.net/RegexKitLite/

<라이브러리 : JSON, DOM XML, Google Data APIs, Twitter, Flick, Game Engines, Unit Testr>
http://www.codingventures.com/2008/12/useful-open-source-libraries-for-iphone-development/

<기타>
http://open.iphonedev.com/
http://joehewitt.com/post/the-three20-project/

음냥... 어처구니 없는 경우가 발생했다.
잘 실행되던 프로그램이 엉뚱한 에러를 토해내며.. 실행이 안되는 것이다.

Simulator 에서는 잘되는데.. 기기에서는 안된다는;;

위와 같은 메세지가 나타나는...

결국 구글링을 통해 아래와 같은 답변을 찾긴 했지만...
정답은 아이폰을 껐다 켜라!!! 였다;;
흐미..

If you get the error message ” putpkt: write failed: Broken pipe.” while compiling your iphone or ipad device, try doing this to resolve the issue.

a) quit Xcode (and the GDB it is running)
b) unplug device
c) delete app from device (hold icon until the ‘X’ appears)
d) turn off device
e) turn on device
f) plug in device (if itunes wants to sync, let it finish)
g) launch Xcode

It will clean your memory and give you a clean slate so Xcode can load your device with the latest build.

프로젝트 Chameleon 
– iOS 개발시 사용하는 UIKit 을 맥으로 포팅해서 맥OS용 앱을 만들때도 iOS개발과 똑같이 개발할수 있도록 해주는 프레임워크 

카멜레온 프로젝트 사이트 : http://chameleonproject.org/ 



카멜레온의 출시에 관련된 내용은 아래 글을 참고하시면 됩니다.
출처 : http://www.appleforum.com/mac-column/60376-ios-앱을-mac-앱으로-더-쉽게-바꾸어-보자.html

2008년 앱스토어가 열린 이래, 개발자들은 아이폰에서 구현한 멋진 기능을 맥에서도 구현할 방법을 찾아 왔었다. 그리고 2010년, 맥 앱스토어가 열리자 완전히 새로운 개발자 그룹이 iOS 앱을 맥으로 포팅시키는 방법을 최초로 알아보기 시작하였다. 유명 개발자 두 명이 iOS 앱을 맥으로 더 간단하게 포팅하기 위한 오픈소스 프로젝트카멜레온(Chameleon)을 만든 것이다.

카멜레온 프로젝트를 보면 션 헤버(Sean Heber)와 크레이그 호켄베리(Craig Hockenberry)를 찾으실 수 있다. Iconfactory의 개발자들이다. 이 둘은 카멜레온을 만든 이유로, Twitterrific for the Mac의 최신 버전을 예로 들었다. Twitterrific for iOS의 유명 기능을 많이 들여왔기 때문이다. 프로젝트 페이지에 따르면, Iconfactory는 코드를 iOS에서 맥으로 들여올 때 코드 중 25%만 사용하였지만, iOS UIKit을 새로운 프레임웍으로 옮기자 그 사용도가 90%로 올라섰다. 이 새로운 프레임웍이 카멜레온이다.

헤버와 호켄베리는 UIKIt을 데스크톱 환경으로 포팅시킬 때, 멀티터치 이벤트와 스크롤링의 비일관성 등 여러 가지 어려운 사항이 있다고 지적한다. 호켄베리의 말이다. "카멜레온은 만병통치약이 아닙니다. 물론 iOS 앱을 재컴파일만 해서 맥에서 마술처럼 돌아가게 할 수 있지만, 그런 것은 권장하지 않아요. 애플은 앱스토어의 앱의 모양과 돌아가는 것이 맥, iOS 동일하기를 바라죠."

iOS에서 강조하던 것 중 절대로 애플이 해결하지 않는 사항들이 몇 가지 있었다. 그래서 팀은 9개월 동안 안정적인 대체제를 작업하였다. 카멜레온은 UIKit의 대체품이라 불리지만, 사실 iOS 앱을 맥에서 돌아가게 하기 위해 필요한 것은 그것 뿐이다. 수상한 코드는 없으며, 애플과 불화를 일으킬만한 코드도 없다. 카멜레온 사이트에 따르면 이러하다. "이 새로운 프레임웍은 애플이 iOS용으로 해 놓은 것을 클린 룸으로 구현시켰습니다. 애플 문서에 기반하는 코드로 만들었으며, 프라이빗 API나 그 외 맥 앱스토어가 허용하지 않는 기술로 만들지 않았습니다."

하지만 앞으로 애플이 UIKit에 대한 문제를 해결하려 하지 않을까? 그렇다면 카멜레온과 같은 것을 어째서 만드는가? 카멜레온 팀에 따르면 이렇다. "애플의 재능 있는 엔지니어들은 분명 이러한 장애물을 극복해낼 것입니다만, 그들이 현재 초점을 기울이고 있는 부분이 미래임은 분명합니다. 앞으로 30년은 맥오에스텐이 아니라 iOS에 미래가 있기 때문입니다." (지난 여름 수많은 iOS와 맥 개발자들이 본지에 결국은 iOS가 맥오에스텐을 삼키리라 보고 있다는 말을 한 적은 있지만, 가까운 장래에 그런 일이 일어나지는 않을 것이다.

What Apple says still goes

그럼에도 불구하고 헤버와 호켄베리는 애플 쪽 상황이 변화할 수 있으며, 카멜레온 개발자들도 거기에 동의하리라는 점을 인정하였다. "카멜레온과 같은 툴에 관심가진 개발자들이 얼마나 많은지 알게 되면 애플이 정책을 당연히 바꿀 수 있겠죠. 제일브레이크 SDK가 유명해지니까 오리지날 아이폰 SDK가 나오는 속도도 빨라진 것이리라 생각하잖습니까? 역사가 반복되면 정말 좋을 겁니다."

하지만 카멜레온 프레임웍에 나타나지 않을 것이 있다. 안드로이드나 윈도폰 7 지원이다. 카멜레온은 애플의 Core Animation 기술에 의존하고 있으며, 애플이 만약 자신의 지적재산권을 써드파티가 마음대로 활용하는 것을 옳지 않다고 결정내릴 경우, 카멜레온 팀은 카멜레온을 끌어내릴 수밖에 없다. 어차피 그것으로 돈을 버는 것도 아니다. 비록 프로젝트 기부금을 받고는 있지만($250에 T-셔츠 판매, $500에 T-셔츠와 아이콘 번들 판매 통한 기부이다), 두 개발자들의 주된 동기가 단순히 다른 개발자들을 도와서 일을 더 좋게, 더 빠르게 할 수 있도록 돕는 것 뿐임은 확실하다. 호켄베리의 말이다.

"T-셔츠 기부금으로 프로젝트를 더 잘 관리할 수 있도록 할 수 있기를 바랍니다. 이 코드를 다른 개발자들에게 라이센스하는 것도 생각해 본 적이 있지만, 하지 않기로 하였어요. 카멜레온 프로젝트는 공개 협력으로 이뤄질 것이며, 개발자들이 애플이 발명한 코드를 사용하는데 거기에서 돈을 받는 것은 좋은 아이디어가 아니에요."

하지만 이 프로젝트는 아직 초창기 상태이며, 호켄베리는 더 많은 개발자들이 카멜레온 프로젝트를 도와주기 바라고 있다. 그의 말이다. "카멜레온 프로젝트의 문서화가 시급합니다. 코드는 물론 개발자들이 카멜레온이 어떻게 돌아가는가를 알아야 하기 때문이죠. iOS 앱을 맥 환경으로 적응시키는 포팅 가이드도 될 것입니다. 자기 제품에 대해 새로운 시장이 생기는 것이니까, 우리가 하는 일을 기뻐하는 개발자들이 많이 있어요. 시간과 노력이 좀 더 있으면, 훌륭한 iOS 앱이 맥에서도 훌륭한 앱이 될 것입니다."

이상

네이버 맥부기 에서 퍼온 글입니다.
자주 사용하는 것들을 이렇게 기재해 놓고, 복사해서 붙여 넣기하라고 정리 한것 같은데.... 귀찮으면.. 이렇게 하시옵소서

Scroll.... 하는 자세.. 눈.. 모양이. ㅎㅎㅎㅎ



=============================================================
버튼 (viewDidLoad)
=============================================================

UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(80, 50, 150, 100)];
[self.view addSubview:button];
[button setTitle:@"자동차" forState:UIControlStateNormal];
[button addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
//이벤트사용시


ex) window-based에서 버튼생성시

UIButton *button=[[UIButton alloc]initWithFrame:CGRectMake(47, 362, 60, 35)];
//[[UIButton buttonWithType:UIButtonTypeCustom]retain];
[button.titleLabel setTextColor:[UIColor blackColor]];
[button setTitle:@"자동차" forState:UIControlStateNormal];
button.titleLabel.textColor = [UIColor blackColor];
[self.view addSubview:button];

=============================================================
레이블(viewDidLoad)
=============================================================

UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(20, 30, 100, 150)];
label.text = @"텍스트";
[self.view addSubview:label];
[label release];

=============================================================
뷰(viewDidLoad)
=============================================================

UIView *view1=[[UIView alloc]initWithFrame:CGRectMake( 0, 0,300,400)];
view1.backgroundColor=[UIColor redColor];
[self.view addSubview:view1];

=============================================================
alertview =>프로토콜 <UIAlertViewDelegate>적용
=============================================================

UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"내가만든것"
message:@"조심해" delegate:self cancelButtonTitle:@"확인" otherButtonTitles:@"취소",nil];
 //=>메서드에 써줌
[alert show];
[alert release];


- (void)alertView:(UIAlertView *)alertView  clickedButtonAtIndex:(NSInteger)buttonIndex {
 if(buttonIndex == 0)
    [label setText:@"확인을 누르셨습니다"];
 else
    [label setText:@"취소를 누르셨습니다"];
}

=============================================================
ActionSheet =>프로토콜<UIActionSheetDelegate>적용
=============================================================
-(void)click2 {
NSLog(@"두번째 버튼을 누르셨습니다");
UIActionSheet *action = [[UIActionSheet alloc]initWithTitle:@"다이얼로그" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"확인", @"취소", @"재시도", nil];
[action showInView:self.view];
[action release];
}

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{
  if(buttonIndex==0)
     label.text=@"확인";
  else if(buttonIndex ==1)
     label.text =@"cancel";
  else 
     label.text =@"재시도";
}

=============================================================
이미지뷰 생성(loadView)
=============================================================
[super loadView];
UIImage *img = [UIImage imageNamed: @"image2.png"]; // 불러올 이미지 파일 가져옴
UIImageView *imageView = [[UIImageView alloc] initWithImage:img]; // 이미지 파일을 뷰에 붙임
[imageView setUserInteractionEnabled:YES]; // 이미지뷰가 인터렉션 할 수 있게
[img release];
self.view = imageView; // 이미지뷰를 현재 뷰에 붙임
[imageView release];

=============================================================
스크롤뷰 생성해서 이미지출력 =>프로토콜<UIScrollViewDelegate>적용
=============================================================

UIImage *img = [UIImage imageNamed: @"image2.png"]; // 불러올 이미지 파일 가져옴
UIImageView *imageView = [[UIImageView alloc] initWithImage:img]; // 이미지 파일을 뷰에 붙임
[imageView setUserInteractionEnabled:YES]; // 이미지뷰가 인터렉션 할 수 있게
CGSize imgSize = [img size]; // 현재 불러온 이미지의 크기 확인
[img release];

 

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:frame]; // 스크롤뷰 생성
[scrollView setScrollEnabled:YES]; // 스크롤뷰 스크롤 가능하게
[scrollView setContentSize:imgSize]; // 스크롤뷰의 크기 설정
[scrollView addSubView:imageView]; // 위에서 만든 이미지뷰를 스크롤뷰에 올림
[imageView release];// 이미지뷰 없앰 (다 사용했으므로...)
self.view=scrollView;

_imageView=imageView;//인스턴스 멤버변수쓰는공간에 "UIImageView *_imageView;"만듬 =>확대/축소를한 출력이미지를 _imageView에 넣음
[scrollView setMaximumzoomScale:2.0f]; // 스크롤뷰의 최대 확대 크기 지정
[scrollView setMinimumzoomScale:0.5f]; // 스크롤뷰의 최소 축소 크기 지정
[scrollView setDelegate:self]; // 델리게이트 설정
// 스크롤뷰를 현재 뷰에 붙임
[scrollView release];


-------------------------------------------
// 이 메서드는 줌을 사용할 뷰를 반환해야 합니다
- (UIView *)viewForZoomingInScrollView:(UIScrollView *) scrollView
//확대축소관련 메서드 =>델리게이트를 꼭지정해야함
{
    return _imageView;
}
Ø//-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
//줌을 한 이 후의 동작에 대해서 지정해 줄 수 있습니다.

=============================================================
view (loadView)
=============================================================

UIScreen *screen = [UIScreen mainScreen]; // 자기 자신(MyUIView) 스크린 생성
CGRect frame = [screen applicationFrame] ;
// 그릴 스크린의 프레임 얻기 bounds 는 전체 사이즈, applicationFrame은 어플리케이션 사이즈
UIView *myUIView = [[UIView alloc] initWithFrame:frame]; // 프레임 크기에 MyUIView영역초기화
myUIView.backgroundColor = [UIColor blueColor]; // MyUIView의 배경색 설정
self.view = myUIView; // 현재의 뷰 연결, 화면에 설정한 뷰 나타남
[myUIView release];


=============================================================
3G 인지 Wifi 인지??

Resources Group에 ADD - Existing Frameworks...로

SystemConfiguration.framework를 추가.
=============================================================
#import <SystemConfiguration/SystemConfiguration.h>
#import <netinet/in.h>
@implementation NetDevTestViewController
-(BOOL)isNetworkReachable{
  struct sockaddr_in zeroAddr;
  bzero(&zeroAddr, sizeof(zeroAddr));
  zeroAddr.sin_len = sizeof(zeroAddr);
  zeroAddr.sin_family = AF_INET;
  SCNetworkReachabilityRef target = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddr);
  SCNetworkReachabilityFlags flag;
  SCNetworkReachabilityGetFlags(target, &flag);
  if(flag & kSCNetworkFlagsReachable){
   return YES;
  }else {
   return NO;
  }
}
-(BOOL)isCellNetwork{
  struct sockaddr_in zeroAddr;
  bzero(&zeroAddr, sizeof(zeroAddr));
  zeroAddr.sin_len = sizeof(zeroAddr);
  zeroAddr.sin_family = AF_INET;
  SCNetworkReachabilityRef target = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddr);
 
  SCNetworkReachabilityFlags flag;
  SCNetworkReachabilityGetFlags(target, &flag);
  if(flag & kSCNetworkReachabilityFlagsIsWWAN){
   return YES;
  }else {
   return NO;
  }
}

 

  


Objective-c 책한번 안보고 아이폰 개발한다고 하니.. 진행하다가 조금씩 막히는 부분이 있어서,
오늘은 "맥부기 아이폰 개발자 모임(네이버) 에서 문씨"의 강좌를 보게 되었다.
자세히 설명을 해 둔 터라 도움이 되었다.

 (울버린이냐.. 배트맨이냐???)


이부분은 문씨 강좌중에 요점 정리된 내용입니다.

1.함수내에서 쓰는 객체들은 전부 오토릴리즈(autorelease)로 한다.
 => alloc init과 release 무더기면 코드만 헤멘다.
2.전역 변수는 지정할때 리테인 카운트를 하나 올리고 안쓸때 해제한다.
 => 계속 가지고 있을 것이니 retain, 더 이상 안쓸때는 release
3.전역 변수에 객체를 사용하다가 해제(release)를 하면 미련없이 nil처리
 => nil 처리 한후 실수로 접근해도 문제없다.
4. 프로퍼티는 전역 변수가 아니다!
 => self.title 과 title, 헛갈리지 말자
5. 다른 객체에 전달하는거, 알아서 하겠지 신경쓰지 말자.
 => MSMutableArray 같은 관리 객체에 넣어둔거 해제될때 알아서 같이 해제 시킨다.
6. retainCount함수로 일일이 확인해 보지 말자 괜히 헛갈린다.
7. 내가 만든 함수도 객체를 돌려줄땐 오토릴리즈로 돌려주자.
8. 특이한 경우로 NSTimer와 같은 경우는 오토릴리즈 되어 있어도 타이머가 돌고 있는
          상태에는 시간이 지나도 해제를 안합니다.
          타이머가 정지되면 동시에 해제 되어 버립니다.
  리테인 했었으면 릴리즈 해주고 안했으면, 그냥 nil 처리 하랍니다.
   

** NSObject : NS 는 Next Step의 약어 + 객체
** -  와 + 가 함수단 앞에 붙는데 +의 경우 클래스 함수라고 하고, -는 인스턴스 함수 라고 한다.
  클래스는 원본, 인스턴스는 복사본 이라고 생각하면 되겠습니다.
  클래스도 주소가 존재하기 때문에 객체로 취급 받기도 합니다.
**객체 생성은 반드시 alloc 이라는 클래스 함수를 호출해서 원하는 객체를 찍어냄
**init은 인스턴스 함수이기 때문에 객체 생성후 최초로 객체에 호출되는 함수이다. 초기화가 제대로 되면, 자기자신의 주소를 돌려주고 , 잘못 되면,  스스로 해제를 한 후 nil을 돌려줍니다.



아이콘 및  인트로 페이지를 제작하는 방법이 이렇게 쉬울줄은 .. 전혀 몰랐다.
(무섭죠... 사실 강화도에서 보면 귀엽답니다.. 냐하하하)


Default.png 이거 하나면 끝이다. 뭐.. 이래..
방법은.. 다음 링크를 찾아서 보세용 

http://cafe.naver.com/mcbugi?1294274546000 

그리고 이전에 찾아두었던 내용중에서... 
아이폰 3, 아이폰 4 , 아이패드 용 아이콘이 사이즈 및 용도별도 모두 틀리다는 것은 알았지만;;
위에 내용에서는 그냥 넣으면 된다고 합니다.(알아서 리사이징 해준다는뎅.) 뭐가 맞는건지 모르겠소.@.@

http://buzzjy.blog.me/20122352200

좀더 검색을 해보니.. 애니메이션 구현도 가능하게 만든 사람이 있어서.. 이것도 참고하시면 좋을듯 싶네요
위와 아래의 차이는.. 단지 애니메이션이 추가 되었으나.. 아니냐의 차이 일 뿐이지요


감사합니다.



단축키를 현재 조금씩 알아 가고 있는데... 
오홋 역시 들여 쓰기가 있었단말이지.. ㅎㅎㅎ

검색해보니... 2008년도꺼도 있던데
 http://cocoasamurai.blogspot.com/2008/02/complete-xcode-keyboard-shortcut-list.html


참고하시고.. 아래는 한글로.. ㅎㅎ

F5 : 자동 완성 목록 띄우기. 
Ctrl+/  : 자동 완성 중 다음 항목으로 이동

Alt + Cmd + ←, → : 이전 이후 작업창 전환
Alt + Cmd + ↑ : 헤더파일/소스파일 창 전환

Cmd + ] : 오른쪽으로 들여쓰기
Cmd + [ : 왼쪽으로 내어쓰기

Cmd + Shift + F : 프로젝트에서 찾기
Cmd + G : 다음 찾기
Cmd + / : 한줄 주석
Cmd+L : 라인 이동

Cmd+Double Click : Definition으로 이동
Alt+Double Click : 해당 Document로 이동
Shitf+Cmd+D : File Open Quickly 띄우기
Shift+Cmd+C : Class Browser 띄우기

Cmd + -&gt;, &lt;- : 줄의 맨 앞/뒤로 이동
Alt + -&gt;, &lt;- : 단어 단위로 앞/뒤 이동
Alt + I : intend 맞추기
Cmd + \ : 브레이크 포인트
Ctrl + Cmd + \ : 브레이크 포인트 enable/disable

Shift+Cmd+O : 다음 실행
Shift+Cmd+I : method 내부로 이동
Alt+Cmd+P : 실행 계속
Cmd + R : 실행

더 필요하다면 찾아서 하나씩 올리겠습니다..
아.. 근데 코드 정리 하는거 없나.. ??  
아아아아아...
열심히... 정리 했는데.. 다 날라갔네요..

1. 탭바 구성 하는 법
2. 날짜 피커
3. 피커 (단일/멀티 피커)
4. 파일 불러와서 피커에 담기
5. 피커에 이미지 담기
6. 사운드 출력

등에 대해서 공부를 했답니다.

어쩌겠어요.. ㅎㅎ (긍정적인 마인드)
스크린샷 뜬거나 올려야겠네요

여기까지!!!
iPhone SDK 위에서 응용프로그램을 제작하기 위해서는 아래 3가지 개념이 중심이 된다고 합니다.

1) Delegation
  위임, 하나의 객체가 지정된 다른 객체로 주기적으로 메시지를 보내서, 
  해당 메세지를 처리할 수 있다면 처리할 것을 요구하는 형태를 말한다. 
  또는 특정 이벤트가 발생한 경우 그 이벤트를 지정된 다른 객체로 전달하여 처리 할 것을 요구하는 것을 말함.
  위임 이벤트를 만나는 것은 어플리케이션이 실행되는 첫 순간부터이다.
  어플리케이션 객체는 초기 시작 처리가 다 끝나고 나서 applicationDidFinishLaunching: 이라는 이름의 이벤트를 지정된 객체로 전달한다. 

2) Model View Controller
  코코아 터치는 완벽한 MVC 패턴의 구조로 구성되어 있다.
  최대한의 재사용성을 보장하기 위해, 3개의 범주에 포함되어야 하면서도, 겹쳐지거나 명확하지 않으면 안된다.

  1) 모델 : 어플리케이션의 데이터를 저장하는 클래스
     --> 어플리케이션의 데이터를 저장하기 위해 고안된 오브젝티브C 클래스를 생성하거나, 
           코어 데이터를 사용한 데이터 모델을 생성함으로 만들수 있다.
  2) 뷰 : 윈도우, 컨트롤과 같이 사용자의 눈으로 볼 수 있고 상호작용할 수 있는 요소들로 구성됨.
  3) 컨트롤러 : 모델과 뷰를 서로 연결하고 사용자의 입력을 어떻게 처리할지 결정하는 어플리케이션 로직 
     --> 완전한 커스텀 클래스(NSObject의 하위클래스)의 형태로 만들수 있다. 
          UIKit 프레임워크 안에 있는 범용적인 컨트롤러 클래스를 상속받아서 나만의 컨트롤러 클래스를 만들게 된다.

3) Target- Action
   만약 화면에 있는 버튼을 손가락으로 누른다면, 이벤트가 다른 오브젝트로 전달된다.
   그 이벤트를 받은 객체는 이벤트를 해석하고 그에 알맞는 명령을 수행하게 된다.
  이 단순한 메카니즘을 Target-Action 패턴이라고 한다. 

자 그렇다면 우선 간단하게 Delegation에 대해서 좀더 알아본다. 

프로젝트를 새로 생성하여 시작해서,  MainWindow.xib 창에 있는 객체 아이콘을 보면,  XXX App Delegation Connections 이 있다
Referencing Outlets 으로 하나의 Outlet이 연결되어 있는데, Delegate 가 File's Owner 와 연결되어 있다.
File's Owner 객체를 선택해서 connections 를 살펴보면, 반대로 delegate가 XXXApp Delegate 객체와 연결되어 있는 것을 확인할수 있다. 


이전에  File's Owner는 어플 자체의 인스턴스를 의미한다고 했다. 
여기에 delegate 클래스로 XXX App Delegate가 등록되어 있는 것이다. XXX  App Delegate 클래스를 생성하고 그것을 File's Owner의 delegate 메시지를 받도록 등록되어 있는 이유는 모두 템플릿이 기본적으로 자동 생성해 준 덕분이다.  이렇기에 XXXAppDelegate.m 객체로 응용 프로그램의 delegate이벤트가 전달된다. 

이렇게 지정된 규칙에 따라,  처음 실행시 최초의 MainWindow.xib에 연결된 delegate 연결을 보고 '위임' 메시지를 보내기 시작한다.
그렇게 처음 보내기 시작하는 메시지 이름은 applicationDidFinishLaunching: 이다. 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {    

    

    // Override point for customization after application launch.


    // Add the view controller's view to the window and display.

    [self.window addSubview:viewController.view];

    [self.window makeKeyAndVisible];


    return YES;

}


위 코드는 XXXAppDelegate.m 파일에 일부다.

윈도우에 하나의 View를 추가하고, 그 윈도우를 화면에 보여주는 내용이다.

이와 같이 XXXAppDelegate.m 파일는 해당 어플의 Delegate 메시지를 처리하는 코드들이 있으며, 현재는 없지만 필요한 Delegate메시지 처리 코드를 추가 할 수도 있다.



- (void)dealloc {

    [viewController release];

    [window release];

    [super dealloc];

}



추가적으로 프로그램이 종료될때는 dealloc 메시지를 전달한다.

여기서는 메모리를 해제하는 코드들이 있게 되는데 delegate 객체에서는 응용 프로그램이 위임하는 각종 이벤트를 방아서 처리하게 된다.



Outlet은 단지  xib 파일에서 아이템을 서로 연결하는데에 사용되는 인스턴스 변수와 같은 것이다.
XXXViewController에 이런 인스턴스 변수가 있는 이유는, 모든 View는 UIViewController에서 상속되기 때문이다.

아..오늘은 여기까지..