콘텐츠로 건너뛰기
Home » Cocoa binding

Cocoa binding

코코아바인딩에서 집합 타입의 프로퍼티를 연결할 때 유의할 점

코코아 바인딩을 사용할 때 특정한 키 이름이 변경가능한 배열(NSMutableArray)일 때, UI를 통해 값을 추가/제거하거나 변경한다 하더라도 이러한 변경이 원래 데이터에 반영되지 않는 문제가 발생하는 경우가 있다.

원문 : 코코아 바인딩 문제해결(Troubleshooting Cocoa Bindings)
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/Troubleshooting.html

집합 컨트롤러가 현재 데이터를 표시하지 않아요.

“이러한 문제는 보통 여러분의 애플리케이션이 집합 콘텐츠를 키-밸류 옵저빙 호환 방식으로 데이터를 변경하지 않기 때문에 일어납니다. 배열을 addObject:removeObject: 로 제거하는 것만으로는 부족합니다.”

더 보기 »코코아바인딩에서 집합 타입의 프로퍼티를 연결할 때 유의할 점

코코아 바인딩의 기초

MVC 패턴에서 프로그래머가 가장 많이 작성하는 코드는 크게 두 가지인데, 하나는 모델 데이터에서 발생한 변경을 뷰에 반영하는 것이고, 다른 하나는 뷰에서 사용자의 조작에 의해서 변경된 값을 모델 데이터에 반영하는 것이다. 사실 이것이 MVC에서 컨트롤러가 수행하는 일이다. GUI프로그램을 작성할 때 가장 많이 하게되는 이러한 작업을 조금 더 간단하게 (가급적이면 코드를 작성하지 않고) 구현하는 방법이 있으면 제법 편하지 않을까? 이럴 때 사용하는 코코아 바인딩은 Cocoa에서 macOS에서 데이터 모델과 뷰 사이의 양방향 연결을 만드는 일종의 ‘마법’이다. 예를 들어 아래 그림과 같은 간단한 앱을… 더 보기 »코코아 바인딩의 기초

코코아바인딩 :: 컨트롤러의 컨텐츠 제공방법

컨트롤러 컨텐츠를 제공하기

컨트롤러들은 (당연히도) 관리할 컨텐츠가 필요하며, 컨텐츠를 지정하는 방법에는 여러가지가 있다. 바인딩을 생성하는 코드를 통해서도 가능하며, IB를 통해서도 설정할 수 있다.

컨트롤러 컨텐츠 설정하기

NSObjectController와 그 서브클래스들은 -initWithContent:를 통해서 초기화되며, 만약 컨텐츠 바인딩을 의도한다면 nil을 넘겨도 된다. 혹은 명시적으로 setContent:를 통해서 지정해줄 수도 있다. 보통은 컨트롤러의 컨텐츠 바인딩을 통해서 연결하는 것이 일반적이다.더 보기 »코코아바인딩 :: 컨트롤러의 컨텐츠 제공방법

코코아 바인딩이 동작하는 방식

코코아 바인딩은 뷰와 데이터 모델을 양방향으로 “묶어서(binding)” 한쪽에서의 변경이 다른쪽으로 자동으로 반영되게끔 하는 것이다. 예를 들어 슬라이더를 드래그하여 값을 변경한 것을 뷰 컨트롤러의 특정한 실수값 프로퍼티에 반영하도록 하거나, 혹은 클래스외부로부터 전달받은 메시지에 의해서 프로퍼티 값이 변경된 경우, 자동으로 이 값이 뷰에 반영되도록 하는 것이다. 이러한 기능은 코코아 바인딩을 쓰지 않고도 얼마든지 구현할 수 있지만, 코코아 바인딩을 사용하게 되면 많은 양의 “접합 코드”들을 작성하는 것을 생략할 수 있다. 예를 들어 다음과 같은 부분에 대한 코드를 일일이 작성해야 한다. 데이터의 변경을 업데이트해… 더 보기 »코코아 바인딩이 동작하는 방식

NSArrayController explained

배열 컨트롤러 배열 컨트롤러는 일련의 객체 집합을 다루는 바인딩 호환 객체이다. 여기서 ‘집합’은 주로 NSArray인데, 코어데이터 등에서는 NSSet을 쓰기도 한다. 배열 컨트롤러는 배열이 아니고 별도의 배열을 관리한다. 이는 배열을 자동으로 재정렬하거나, 선택된 객체들을 기억하거나 하는 배열 자체에 저장될 수 없는 몇 가지 메타 정보를 가지고 배열을 다루는 것을 도와준다. 배열 컨트롤러는 NSObjectController의 서브클래스로, 다음 메소드를 통해서 초기화할 수 있다. – (instancetype)initWithContent:(id)content 다시 NSObjectController는 NSController의 자손인데, 이 컨트롤러는 객체의 편집 과정에 따른 이벤트를 발생시키는 기능을 갖고 있다. -objectDidBeginEditing: -objectDidEndEditing: -commitEditing -commitEditingWithDelegate:didCommitSelector:contextInfo:… 더 보기 »NSArrayController explained

코코아 바인딩이란

코코아 바인딩

기능적인 측면에서 가장 단순하게 설명하면, 코코아 바인딩은 모델과 뷰 사이에 어떠한 글루코드 없이 값과 디스플레이되는 것을 동기화시키는 것이다. 즉 바인딩을 구성하면 코드상에서 어떤 프로퍼티의 값이 변경될 때 별도의 업데이트 코드를 작성하지 않더라도 자동으로 뷰가 업데이트되고, 반대로 뷰에서 사용자가 값을 조작하는 이벤트가 발생하면 역시 아무런 코드가 없더라도 연결된 프로퍼티 값이 변경되게 하는 것이다.

코코아 바인딩은 코코아의 기본 기술들을 결합하여 구현되는데, 작성/유지해야 하는 코드의 양을 최소화하면서 뷰와 모델간의 바인딩을 거의 공짜로 제공한다. 클래스를 작성할 때, 키밸류 컨벤션만 따랐다면, 코코아 바인딩을 적용하기 위해서 기존 코드를 재작성할 필요도 없다.

더 보기 »코코아 바인딩이란

[Cocoa] NSValueTransformer

Value Transformer

코코아 바인딩에서 어떤 키패스의 값을 그대로 사용하는 것이 아니라 다른 단위로 변환하는 등의 변화를 주고 사용해야 한다면 중간에 어떤 매개체가 값을 바꿔서 전달해주는 역할을 하도록 해야 한다. 예를 들어 섭씨 온도를 표시하는 텍스트 필드와 화씨 온도로 조절하는 슬라이드가 있고 이 들을 코코아 바인딩으로 구현하고자 한다면, (물론 모델 객체의 두개의 프로퍼티를 각각 만들고 여기에 바인딩해도 되지만) NSValueTransformer를 사용하여 값 변환 장치를 만들어 사용할 수 있다.

사용하는 일이 흔하지는 않지만, 파운데이션 프레임워크는 이런 값 변환기를 몇 개 가지고 있으며 개발자는 NSValueTransformer를 서브클래싱하여 이런 변환기를 만들 수 있다.

더 보기 »[Cocoa] NSValueTransformer