Home » key-value observing

key-value observing

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

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

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

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

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

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

Swift4의 키밸류 옵저빙 구현 방식

Swift4 에서 키밸류 옵저빙에서 몇 가지 변화가 있었는데, 옵저버 중심의 콜백이 아니라, 타깃 중심의 핸들러 기반 API가 추가되었다. 그리고 몇 가지 편의 클래스들이 추가되었다. 먼저 observe(_:options:changeHandler:) 메소드가 추가되었다. 이 메소드는 addObserver:… 를 대신해서 옵저버 객체가 아닌 변경이 발생했을 때 호출될 핸들러를 지정하는 것이다. 전체 시그니처는 대략 다음과 같다. (아직까지 NSObject나 NSKeyValueObserving 문서가 업데이트되지 않아서 해당 API에 대한 페이지가 존재하지는 않는다.) 일단 NSKeyValueObservedChange와 NSKeyValueObservation의 두 개의 새로운 타입이 추가되었다. NSKeyValueObservedChange 이전의 옵저버 메소드는 변경사항의 디테일을 Dictionary<NSKeyValueChangeKey, Any>? 타입으로 주었다. 이 타입을… 더 보기 »Swift4의 키밸류 옵저빙 구현 방식

KVC 집합 접근자/변경자 메소드 작성방법

키밸류 코딩의 집합 접근자/변경자 메소드 to-many 관계의 프로퍼티에 대한 조정은 키밸류 코딩에서 배열 프록시를 통해서 이루어진다고 했다. 이 때 개별 원소를 추가/삭제/교체하는 작업의 효율을 높이고, 각 동작에 대해서도 KVO 지원을 가능하게 하기 위해서 배열 프록시와 연계하여 동작할 수 있는 집합 메소드를 추가로 정의하는 것이 강력하게 권장된다. 이들 메소드들은 기본적으로 NSMutableArray의 기본적인 액세스 메소드들에 키 이름이 혼합된 형태로, 일정한 규칙에 의해 이름 지어진다. 단, 키 이름이 메소드 이름에 들어가기 때문에 메소드명이 고정되지 않았고, 따라서 NSKeyValueCoding 레퍼런스 상에서는 소개되지 않는다. 집합 접근자… 더 보기 »KVC 집합 접근자/변경자 메소드 작성방법

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

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

[cocoa] 키-밸류 옵져빙 간단 예제

키-밸류 옵저빙은 (예전에 한 번 글을 쓴 적이 있는데… 자꾸 까먹음) 어떤 객체의 변경이 가해질 때 이를 다른 객체가 감지하도록 하는 매커니즘이다. 특정 객체가 KVO를 따른다면, 해당 객체에 옵저버를 붙일 수 있다. 이 때 옵저버는 변경 통지를 받을 객체가 된다. 옵저버를 붙일 때는 옵저버, 변경을 감지하고자하는 키패스, 옵션 등이 필요하다. 옵저버 쪽에서는 observeValueForKeyPath:ofObject:change:context: 메소드를 작성하면 된다. 만약 자신의 어떤 프로퍼티 값이 변경되는 것을 알아채고자 한다면 [self addObserver:self forKeyPath:@”self.aNumber.intValue” options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:null]; 이라고 하고, 이를 감지하는 메소드는 아래와 같은 식… 더 보기 »[cocoa] 키-밸류 옵져빙 간단 예제

키밸류 옵저빙이란

키밸류 옵저빙 키밸류코딩(KVC)에 이어서 키밸류 옵저빙에 대해 이야기해보자. 키밸류 코딩에 관한 포스팅에서 키밸류 코딩은 키밸류 옵저빙의 근간이 되는, 어떤 객체의 프로퍼티를 키 이름으로 런타임에 동적으로 탐색하여 액세스할 수 있게하는 기술이라고 하였다. 키밸류 옵저빙 역시 프로퍼티 액세스와 관련한 Objective-C 런타임이 제공하는 동적 기능의 일종으로, 특정한 키에 대한 객체의 프로퍼티 값이 변경될 때, 해당 변경에 대한 알림이 다른 객체로 통지되는 것을 말한다. 예를 들어 foo 라는 객체 인스턴스에 a 라는 프로퍼티가 있고, bar 라는 객체가 이 프로퍼티에 대한 옵저버로 등록이 되어 있다면,… 더 보기 »키밸류 옵저빙이란

Pages: 1 2 3