최초 작성일 : 2012/01/27 08:51


처음으로 Xcode 4.2에서 프로젝트를 생성하고부터는 나날이 하는 일이 삽질이다...-.-

역시 대체로 문제가 되는 것은 새로 도입된 스토리 보드...

전체적인 화면의 흐름을 한 눈에 보면서 작업한다는 점에서는 더할나위 없이 좋지만
아무래도 새로 생긴 기능이다 보니 삽질을 피해갈 수는 없다.

오늘은 아주 간단한 삽질 하나 소개(!?)한다.

최초 프로젝트를 생성할 때는 탭바 베이스의 화면으로 시작을 했다.
그래서 아래와 같은 스토리 보드가 생성이 되었다.





최초에는 탭바 아이템 2개가 기본으로 생성이 되었고 나머지 하나는 직접 생성한 것으로
이에 대한 삽질은 지난 번에 소개를 하였다.

그런데 작업을 하다보니 기왕 하는 김에 Universal 앱을 만들고픈 욕심이 생겼다.
그래서 아이패드를 고려한 화면으로 재구성이 필요하였다.

결국 아이패드에서는 좀 휑~해보이는 탭바를 포기하고 분활 화면 형태로 가기로
결정을 했다. 그리고 과감하게(또는 무식하게) 탭바 컨트롤러라고 표시된 스토리보드상의
오브젝트를 지워버렸다.





그리고는 의기양양하게 다시 Run!

그러나...RootViewController가 없다는 메시지와 함께 화면은 먹통...

일단 이전 방식을 염두에 두고 AppDelegate 소스를 보았다.

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

{

    // Override point for customization after application launch.;

    return YES;

}


어...좀 깨끗하네...-.-
이 것 때문인가...? 하고서는 열심히 그전 처럼 코딩을 했다.
rootViewController로 사용할 뷰 컨트롤러의 인스턴스를 만들어서
window.rootViewController에 넣어주고 makeKeyAndVisible도 호출해주고...

그러나 역시 먹통...

다시 추가한 코드 싹 지우고 구글링 시작...
그리고 구글신의 도움으로 원인 발견...

일단 탭바 컨트롤러를 삭제한 상태에서의 스토리 보드 화면은 아래와 같다.




탭바를 지우기 전과 달라진 점이라면 당근 탭바 컨트롤러가 사라졌고 동시에 같이
사라진 놈이 하나 있다. 틀린 그림 찾기나 해볼까~?

바로 탭바컨트롤러의 좌측에 붙어있던 화살표(첫 번 째, 두 번 째 그림 참고).
그렇다 바로 이 화살표가 rootViewController를 지정해 주는 역할을 하고 있었던
것이다.

그럼 이 화살표는 어떻게 만드느냐.
스토리 보드 화면 우측창에서 Attribute 인스펙터를 선택하고 중간정도에 보면
체크박스 4개가 보인다. 그 중 맨 위에 Initial Scene이라는 타이틀이 붙어있는 것이
바로 rootViewController를 지정하는 역할을 한다. 이 것을 체크하니 아래와 같이
FirstViewController의 좌측에 화살표가 생기고 Run을 하니 화면이 정상적으로
나왔다.




이상으로 오늘의 짧고 굵었던(은 좀 아닌 것 같고) 삽질기를 마친다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요

최초 작성일 : 2012/01/20 10:21


오랜만에 심기일전해서 새로운 프로젝트를 생성하였다.

그런데 생성해놓고보니 Xcode 4.2에서는 처음으로 프로젝트를 생성하는 것이었네...

2가지에서 당황하였다.

먼저 스토리보드...
xib 파일은 안보이고 스토리보드만 보여서 조금 당황하고
스토리 보드 들어가서 탭바에 아이템 추가하는 방법을 몰라 더 당황하고...-.-

일단 새 탭바 아이템을 터치했을 때 보여질 뷰 컨트롤러는 기본으로 생성되는
뷰 컨트롤러 하나를 복사하였다. 복사해 놓으니 하단의 탭바 아이템이 안생긴다.
좌측의 컨트롤 리스트에서 드래그앤 드롭으로 가져다 놓으면 된다.




일단 새 탭바 아이템과 이 것을 눌렀을 때 보여질 뷰 컨트롤러를 만들긴 했는데
이 놈을 가장 좌측의 메인 창(탭바 컨트롤러라고 되어있는 놈)과 연결하는 방법을
못찾고 헤맸다. 미아를 하나 만든 셈이다...-.-

결국 경력 13년의 통밥으로 해결 아래 그림과 같이 드래그&드롭하면 연결되면서
관계가 만들어진다.

가장 좌측 탭 뷰 컨트롤러를 선택하면 우측의 커넥션 인스펙터에 다음과 같은
내용이 보인다.




빨간 색 상자 안에서 가장 우측 원을 클릭하고 드래그해서 새로 추가한 탭바 아이템과
뷰 컨트롤러쪽으로 연결시켜주면 관계(Relationship)이 추가된다.




일단 이렇게 해서 첫 번 째 당황스러운 문제 해결...^^

얼추 이렇게 만들어놓고 이제 IBOutlet으로 선언하고, @property @synthesize 
설정하고, dealloc 처리를 하려고 하는데...웬걸...release 함수 호출하는데서 죄다 에러표시가
떠버린다... ARC가 어쩌구 하는데...ARC가 뭐냐?




찾아보니 Automatic Reference Counting이란다. 그럼 이놈이 뭐하는거냐?
일단 애플의 API문서에는 다음과 같이 정리되어있다.

Automatic Reference Counting (ARC) is a compiler-level feature that simplifies the process of managing the lifetimes of Objective-C objects. Instead of you having to remember when to retain or release an object, ARC evaluates the lifetime requirements of your objects and automatically inserts the appropriate method calls at compile time.


즉 Objective-c에서 객체들의 라이프타임을 관리하는 컴파일러 수준에서 제공하는 기능으로
개발자가 일일이 객체의 retain / release  관리하게 하는 대신에 ARC 기능이 객체에 요구되는
라이프타임을 평가하여 컴파일시에 적절하게 메서드를 호출해 준다...는 야그다.

한마디로 retain 카운트 처리를 컴파일러에서 해주겠으니 개발자는 딴거나 신경써라 하는거다.

어쨌든 개념은 탑재했는데...문제는 이전 버전에서 생성된 외부 라이브러리를 사용할 경우나
이전 소스코드가 무지 많아 엄청나게 많은 dealloc 함수를 없애야 한다면...어쩌나...?

그래서 또 검색을 해봤더니 다 방법이 있었다.
일단 무심결에 지나갔지만 프로젝트 생성시에 ARC 사용을 해제하는 옵션이 있다 하니
기존 코딩 방식을 고수하고자 하면 이 옵션을 해제 하면 될 것이고. 나처럼 아무생각없이
지나쳐서 그런 옵션이 있었는지도 모르고 있는 사람이라면 다음과 같이 처리하면 된다.

1. 프로젝트를 선택하고 Build Phases탭으로 가자
2. Compile Sources 항목을 선택하자.
3. ARC를 사용하지 않을 소스 목록을 모두 선택하자
4. 키보드 Enter를 친다 (그러면 작은 입력 창이 나타난다)
5. -fno-objc-arc를 입력하고 Done 버튼을 눌러 종료한다.
6 끝...









이러면 빌드할 때는 정상적으로 되지만 버그인지 원래 그런지 에러 표시(빨간 원)는 없어지지
않는다.

암튼 4.2에서 첫 프로젝트 생성 후 당황했던 2가지 문제를 이렇게 처리하였다...^^

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요