Window-based Application은 XCODE에서 아이폰용 어플리케이션 프로젝트 템플릿을 선택할때 코코아터치 클래스기반으로 작성할 수 있는 가장 기본적인 템플릿이다. XCode 프로젝트 화면을 처음으로 접했을때 Window-based Application과 View-based Application 의 차이점이 도대체 무엇인가 하고 느낀적이 있을 것이다. Window-based Application로 우선 프로젝트를 생성한후 뷰를 하나 추가하면 View-based Application로 선택한 것과 똑같이 만들어 지는데 수작업을 통하여 뷰를 넣어 봄으로써 그 차이점을 알아보자.

<그림1> 템플릿 선택

 그림1과 같이 Windows-based Application을 선택한후  Sample이라 프로젝트명으로 프로젝트를 생성하면 다음과 같은 파일이 생성된다. 

<그림2> 자동으로 생성된 파일

주목해서 보아야 하는 것은 다음 3가지이며 3개의 파일이 한세트이다..

  • SampleAppDelegate.h
  • SampleAppDelegate.m
  • MainWindow.xib
  • 여기서 뷰를 하나 추가하면 View-based Application 이 되는데 수동으로 View를 추가해 보기로 하겠다.

    상단의 메뉴에서 File > New File 을 선택한다. Cocoa Touch Class 를 선택한 다음 UIViewController subclass를 선택한다. 그리고 아래의 옵션에서 With XIB for user interface 를 같이 첵크해서 클래스파일을 생성할때 XIB 파일도 같이 자동으로 추가되도록 한다. 클래스 이름을 SampleViewController 라고 입력한 다음 Finish 버튼을 누른다.

    추가되어진 다음 3가지이며 역시 3개의 파일이 한세트이다..

  • SampleViewController.h
  • SampleViewController.m
  • SampleViewController.xib
  • View Class 파일을 추가했지만 파일만 생성되어 있을뿐 아직까진 메인 윈도우와 어떠한 연결 고리도 가지고 있지 않다. 이제 SampleAppDelegate.h 과 SampleAppDelegate.m 파일을 수정해서 뷰를 수작업으로 연결을 시켜야 된다.

    SampleAppDelegate.h파일을 열어보자

    @class SampleViewController;


    @interface SampleAppDelegate : NSObject <UIApplicationDelegate> {

        UIWindow *window;

        SampleViewController *viewController;

    }


    @property (nonatomic, retain) IBOutlet UIWindow *window;

    @property (nonatomic, retain) IBOutlet SampleViewController *viewController;


    @end

    클래스 정의부 안에 파란색으로 칠해진 부분이 새로 추가된 부분이다. SampleViewController를 선언해주고 있다.

    SampleAppDelegate.m 파일을 수정하자..

    #import "SampleAppDelegate.h"

    #import "SampleViewController.h"


    @implementation SampleAppDelegate


    @synthesize window;

    @synthesize viewController;



    #pragma mark -

    #pragma mark Application lifecycle


    - (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;

    }


    - (void)dealloc {

        [viewController release];

        [window release];

        [super dealloc];

    }


    어플리케이션의 실행준비를 완료되었을때 호출되는 didFinishLaunchingWithOptions 에서 AddSubView 함수를 호출해서 ViewController의 View를 추가한다. 그리고 윈도우가 종료될때 window를 release 해주기 전에 viewController를 종료하는 부분을 추가해주어야 한다. 윈도에서 뷰를 추가하는 위의 코드는 기타 다른 뷰를 추가하는 코드에서 자주 응용되는 코드이니 눈여겨 볼 필요가 있다.

    아울렛 연결

    SampleAppDelegate.h의 내용중 viewController는 인터페이스 빌터에서 작성하는 MainWindow.xib 파일에서 참조할 수 있도록 IBOutlet 참조자가 추가 되어 있다. 즉, 인터페이스 빌터에서 연결작업을 한번더 해주어야 한다.

     @property (nonatomic, retain) IBOutlet Sample2ViewController *viewController;

    Groups & Files 에서 MainWindow.xib 를 더블클릭하면 인터페이스 빌더가 열려진다.


    중간의  ViewMode를 변경하면 Type를 알기쉽게 보여준다.


    4개의 객체중 Sample App Delegate 를 한번 클릭한 후 두번째 탭 우화살표모양의 Connections 화면을 본모습이다. Sample App Delegate는 현재 SampleAppDelegate 자기 자신을 가르키며 단 멤버 함수 viewController와 window를 볼수 있다. 이 두가지 멤버는 IBOutlet 지시자를 표기했기 때문에 인터페이스 빌더에서 아래의 화면과 같이 Outlet 으로 인지하고 있다. 현재 window 랑 MainWindow.xib 파일에 Window 랑 연결되어 있으나 새로 추가한 ViewController 는 연결이 되어 있지 않다.


    라이브러리 윈도우에서 Classes 를 열어서 찾아보면 위에서 작성한 뷰 클래스의 SampleViewController 를 찾을 수 있다. SampleViewController를 클릭한후 마우스로 드랙해서 MainWindow.xib 화면에 추가하면 아래와 같이 Sample view Controller가 추가된다.
     

    MainWindows.xib의 Sample App Delegate 를 클릭한후 Connections 창을 열고 viewController 의 오른쪽 동그라미에 마우스를 오버 시키면 + 모양으로 바꾼다. 이것을 드래그해서 다시 왼쪽 윈도우 MainWindow.xib에서 Sample View Controller 객체 윗부분에 드롭시키면 아래의 그림과 같이 viewController 는 라이브러리에서 추가한 Sample View Controller 와 연결이 완료된다.


    이제 인터페이스 빌더에서 작업이 끝났기 때문에 Xcode 화면으로 복귀하기 전에 반드시 저장을 시켜야 된다.
    이렇게 수작업한 코드는 프로젝트 템플릿중 Sample이란 프로젝트명으로 View-based Application을 선택한 프로젝트랑 똑같다.
    Posted by tklee

    댓글을 달아 주세요

    잠자기

    해킨토시 2011.01.26 01:29
    잠자기는 해킨의 거의 마지막 코스이다...
    NullPowerManagement와 dsdt 로 제대로된 잠자기를 구성해놓지 않는다면 힘들다...
    최대의 고비인 자기 시스템의 dsdt를 추출해서 편집해야만 된다....그래서 다들 포기하고 사는 분들이 많다 ㅎㅎ

    약간의 쉬운 방법이 있다면 SleepEnabler.kext 를 Extras/Extension 에 설치하는 방법!!

    SleepEnabler는 커널버전에 32/64비트 버전에 아주 민감하기 때문에 제대로된 버전을 받아야 된다.

    다음은 10.6.6에서 비교적(?) 잘 동작하는 SleepEnabler 이다.
    32비트 전용이다.

    SleepEnabler.kext.zip

    단, 제대로 잔다고해서 전원이 꺼져있는 상태에서 제대로 깨어난다는 보장은 없다. ㅋㅋㅋ
    뭐가 문제인지 몰라도 P6X58D-E 이놈의 보드 자긴 자도 다시 깨어나는걸 본적이 없다.
    깨어나면서 화면이 쓰레기가 가득 쩝...

    '해킨토시' 카테고리의 다른 글

    잠자기  (0) 2011.01.26
    윈도우에서 HFS+ 읽고/쓰기  (0) 2011.01.07
    Snow Leopard NTFS 쓰기 가능하게 하기  (0) 2011.01.07
    Posted by tklee

    댓글을 달아 주세요

    MacDrive8을 그냥 설치하면 된다. 윈도우7 64비트도 완벽지원

    http://thepiratebay.org/torrent/5823868/macdrive_8.0.6.52-Keygen.included.zip

    '해킨토시' 카테고리의 다른 글

    잠자기  (0) 2011.01.26
    윈도우에서 HFS+ 읽고/쓰기  (0) 2011.01.07
    Snow Leopard NTFS 쓰기 가능하게 하기  (0) 2011.01.07
    Posted by tklee

    댓글을 달아 주세요

    맥에서는 NTFS 파티션을 사용하기 위해 여러가지 방법이 있다.
    Snow Leopard는 NTFS 파티션을 read 만 가능하게 마운트 되기 때문에 쓰기/수정/삭제가 불가능하다.
    디폴트를 ReadOnly로 해 놓은 이유는 모르겠지만 아래와 같이 살짝 수정해주면 쓰기도 가능해진다.

    1. 터미날을 열고 Application/Utilities/Terminal

    2. sudo mv /sbin/mount_ntfs /sbin/mount_ntfs.orig

    3. sudo vi /sbin/mount_ntfs
    #!/bin/sh
    /sbin/mount_ntfs.orig -o rw "$@"

    4. sudo chown root:wheel /sbin/mount_ntfs
       sudo chmod 755 /sbin/mount_ntfs

    Reboot!

    이제 보니 별로 추천하고 싶지 않은 방법이다. 간혹  NTFS 파티션을 망치는 경우가 있어서 듀얼부팅되어 있는 경우 윈도로 부팅할 경우 매번 디스크 스캔을 하게 된다. 시간 엄청 잡아먹어서...

    '해킨토시' 카테고리의 다른 글

    잠자기  (0) 2011.01.26
    윈도우에서 HFS+ 읽고/쓰기  (0) 2011.01.07
    Snow Leopard NTFS 쓰기 가능하게 하기  (0) 2011.01.07
    Posted by tklee

    댓글을 달아 주세요