iOS5 parentViewController 프로퍼티 변경점

얼마 전 본인은 iOS 개발환경을 iOS 4.3 / Xcode 3.2.6  에서 iOS 5.1 / Xcode 4.3.3 으로 업그레이드 하였다. 업그레이드 된 환경에서 기존에 개발하였던 코드를 실행해보닌 dismissModalViewController 가 정상적으로 동작하지 않았다.

그 이유를 확인해보니 iOS5 부터 UIViewController 의 일부 Property 가 수정되었다. (수정된 부분에 parentViewController 가 포함된다.)

iOS Developer Library 의 최신 UIViewController Reference 중 parentViewController 내용을 확인해보자.

< From iOS Developer Library >

위 내용을 정리해보면,

  • parentViewController 는 Container View Controller (Navigation controller, Tab bar controller 등. 자세한 내용 참조)와 같이 사용될 경우에 유용하다.
  • iOS 5 이전에서는 UIViewController 가 Container View Controller 와 연동되지 않고 단독적으로 사용되더라도, 자신을 Modal View 로 호출한 View Controller 를 parentViewController 로 접근할 수 있었다.  그러나 iOS 5 부터는 해당 프로퍼티를 통해 접근할 수 없다. 대신 presentingViewController 프로퍼티를 사용할 수 있다.

presentingViewController 의 레퍼런스를 살펴보자. iOS 5 부터 지원함을 확인할 수 있다.

< From iOS Developer Library >

기본적으로 dismissModalViewController 의 주체는 Modal View Controller 를 호출한 UIViewController 에 있다. 따라서 많은 참고 서적에서는 이 부분을 이렇게 코딩한다.

[myViewController.parentViewController dismissModalViewControllerAnimated:YES];

그러나 위에서 설명한 바와 같이 Container View Controller 안에서가 아닌, 각각 독립적인 두 개의 UIViewController 가 Modal View 호출자/수신자 의 관계를 맺고 있다면, iOS 5 에서는 더 이상 위 코드가 정상적으로 동작하지 않는다.

그렇다고 parentViewController 대신 presentingViewController 로 프로퍼티를 대체한다면, presentingViewController 는 iOS5 이전에서는 지원하지 않으므로 하위 버전 호환성의 문제를 갖는다.

앞서 언급했듯이 기본적으로 dismissModalViewController 의 책임은 Modal View 를 호출한 View Controller 에 존재한다. 그러나 parentViewController 를 명시적으로 참조하지 않고, Modal View 로 호출된 자신에게 dismissModalViewController 를 호출해도 정상적으로 동작한다. (즉 위 예시 코드에서 parentViewController 가 없어도 동작한다.)

Reference 에 기술된 내용을 확인하자. 자신(Presented View Controller) 에게 dismissViewController를 호출해도 Modal View 를 호출한 주체(Presenting View Controller)에게 자동적으로 메시지가 전달됨을 확인할 수 있다.

< From iOS Developer Library>

한가지 눈여겨 볼 것은 dismissModalViewController 메소드는 iOS5 에서 deprecated 된다. 대안 메소드는 레퍼런스를 참고하자.

2012 WWDC 에서 애플은 iOS5 사용자가 80% 정도라고 발표했다. iOS5 이전 버전부터 지원된 앱의 경우라면 모를까 새로 개발을 시작하는 앱이라면 iOS5 기준으로 코드를 작성하는 것이 좋지 않을까 하는 개인적인 생각이다. 앱의 iOS 지원 버전도 가볍게 생각할 부분은 아닌 것 같다.

Advertisements
Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: