UIViewController를 초기화 할때는 보통 다음과 같은 방식을 사용합니다.
[code]UIViewController *viewController = [[UIViewController alloc] init];[/code]
혹은 NIB를 이용한 다음과 같은 방법도 사용하게 됩니다.
[code]UIViewController *viewController = [[UIViewController alloc] initWithNibName:@”nibName” bundle:[NSBundle mainBundle]];[/code]
위와 같이 호출할 경우에는 자동으로 초기화가 되며 loadView, viewDidLoad가 순차적으로 호출되게 됩니다.
그런데 UITabBarController를 Interface Builder를 사용하여 다른 UIViewController를 등록하여 사용하게 되면 위의 두 메서드가 초기화시에 호출되지 않습니다.
또한 비슷한 컨트롤인 UINavigationController로 같은 문제를 가지고 있습니다. 이게 버그인지 무엇인지 잘 모르겠군요.
이런 난감한 문제를 해결하기 위해서 검색을 해보았지만 역시나 IB를 사용하지 않고 초기화 하는 방법밖에 없는 모양입니다.
[code]// UITabBarController 초기화
UITabBarController *tabBarController = [[UITabBarController alloc] init];
tabBarController.customizableViewControllers = nil;
// 3개의 다른 UIViewController 생성
// 3개의 뷰는 UINavigationView를 사용합니다.
UIViewController *View1 = [[UIViewController alloc] init];
UINavigationController *tab1Controller = [[UINavigationController alloc] initWithRootViewController:View1];
tab1Controller.tabBarItem.image = [UIImage imageNamed:@”1.png”];
[View1 release];
UIViewController *View2 = [[UIViewController alloc] init];
UINavigationController *tab2Controller = [[UINavigationController alloc] initWithRootViewController:View2];
tab2Controller.tabBarItem.image = [UIImage imageNamed:@”2.png”];
[View2 release];
UIViewController *View3 = [[UIViewController alloc] init];
UINavigationController *tab3Controller = [[UINavigationController alloc] initWithRootViewController:View3];
tab3Controller.tabBarItem.image = [UIImage imageNamed:@”3.png”];
[View3 release];
tabBarController.viewControllers = [NSArray arrayWithObjects: tab1Controller, tab2Controller, tab3Controller, nil];
[window addSubview: tabBarController.view];[/code]
위와 같은 방법을 사용하시면 정상적으로 작동하는 것을 알 수 있습니다.
참고 : http://discussions.apple.com/thread.jspa?threadID=1670615
Tag Archives: 아이폰

iPod Touch 블루투스를 사용할 수 있다?
지난주 회사 회식 때 직원들과 한가지 설전이 있었습니다. 사실 뭐 별 이야기 아니었지만… 내용이 무엇이냐 하면
곧 나올 iPhone OS 3.0의 iPod Touch용 OS가 유출되었다는 것입니다. 그런데 거기서 블루투스를 지원하게 되었다는 이야기 였습니다.
사실 아무생각 없이 하드웨어가 지원을 하지 않는데 OS가 지원한다고 어떻게 블루투스 기능이 생기냐는 것이 저의 주장이었습니다.
하지만 오전에 갑자기 궁금해져서 검색해 보았더니 제 생각이 완벽하게 틀렸다는 느낌을 들게 만들어 주는군요.
실제로 현재의 iPod Touch 2세대에는 나이키+ 리시버를 지원하고 있습니다.
저도 이런것을 지원한다는 것은 알고 있었지만 써본적이 없고 도대체 신발의 모듈과 어떤식으로 통신하게 되는지는 고민도 해본적이 없었네요.
실제로 아이팟 터치에는 블루투스 모듈이 들어가 있습니다.위 사진은 아이팟 터치의 분해 사진입니다. 왼쪽 상단에 작게 써진 Broadcom이라고 써진 장치가 보이시나요?
해당 장치의 모델명은 BCM4325로써 802.11a/b/g with Bluetooth® 2.1 + EDR and FM 을 지원하는 장치입니다.
WIFI와 Blutooth를 동시에 지원하는 장치였다는 것이죠. 이것을 보니깐 믿음이 조금 생기게 되었습니다.
당신의 아이팟 터치 2세대는 단지 나이키+와의 연동을 위해 블루투스를 탑재하였다고요;;; 어찌보면 좋은 기능을 일부러 구현 안해놓은 느낌이랄까요.
예전에 캐논 DSLR을 쓸때의 느낌이 들면서 배신감을 느끼게 되더군요. (사실 이런게 진정한 사업 수완이 아닐까 고민해 봅니다.)그러나! 희소식이 하나 있습니다. iPhone OS 3.0 발표날 Q/A 세션에서 애플의 Greg Joswiak이 아이팟 터치의 블루투스가 “Unlock” 된다는 답변을 하였다고 합니다.
그렇게 되면 Peer-to-Peeer 연결이 가능해 지면서 외부의 블루투스 장치들을 사용할 수 있게 됩니다.
이는 곳 제가 가지고 있는 블루투스 헤드셋을 가지고 외부 장치 없이 음악을 들을 수 있게 됨을 의미하는군요.
아이팟 터치의 iPhone OS 3.0으로의 업그레이드는 사실 무료가 아닙니다. $9.99 인데요. 지금까지 계속되는 새로운 기능들의 발표를 보면 꼭 업그레이드를 하고 싶다는 생각이 듭니다.
국내의 이동통신 시장을 봤을때는 아이폰을 들여 돈안되는 짓을 절대 하고 싶어하지 않을테니 이통사 시장은 진시황제의 불로초를 향한 마음처럼 평생을 자신에게 이득이 되는 것만 찾아가며 하라고 냅두고 아이팟 터치라도 사랑해 주어야 하겠습니다.
그나저나…이런식으로도 돈을 벌 수 있다니 참 신기합니다. 마치 자동차를 샀는데 펌웨어를 업그레이드 했더니 비행기로 변신하더라…하는 느낌이랄까요.
사실 이런 상황이면 고객은 회사에 화를 내야 하는데, 마치 미쳐 생각못한 선물을 받은것 처럼 기뻐하게 된다는 것이죠. ㅎㅎ
참고:
http://www.engadget.com/2009/03/17/2g-ipod-touch-to-have-bluetooth-capability-unlocked-by-iphone-os/
http://www.fudzilla.com/index.php?option=com_content&task=view&id=12683&Itemid=70